zoukankan      html  css  js  c++  java
  • 栈的顺序存储结构

    1 定义
      栈是限定只能在表尾删除和插入操作的线性表。
      允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。
      栈的插入操作称为进栈,也称压栈、入栈。
      栈的删除操作称为出栈,也称弹栈。

    2 栈的抽象数据结构
      由于栈本身就是一个线性表,所以线性表的操作特性它都具备,针对它的特殊性,在它的操作上可能会有一些变化。将进栈和出栈分别改名为push和pop。
      由于栈本身是一个线性表,所以线性表的顺序存储结构和链式存储结构同样适用于栈。

    3 栈的顺序存储结构
      用顺序存储结构存储的栈称为顺序栈。线性表是用数组来实现的。对于栈,用下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化比较小。
      我们定义一个top变量来指示栈定元素在数组中的位置。若存储栈的长度为StackSize,则栈顶位置top必需小于StackSize。当栈存在一个元素时,top等于0,因此空栈的判断条件为top等于-1.

      栈的结构定义

        typedef int SElemType;
        typedef struct {
            SElemType data[MAXSIZE];
            int top;                //用于栈顶指针
        } SqStack;

    若现在有一个栈,StackSize为5,则普通栈、空栈、满栈的情况如下图所示。


    4 进栈
    对于栈的插入,即进栈操作,其实就是做了如下处理。

    Status Push(SqStack *s, SElemType e) {
    
        if (s->top == MAXSIZE - 1) {        //栈满
            return ERROR;
        }
    
        s->top ++;    //栈顶指针加1
        s->data[s->top] = e;    //将新元素赋值给栈顶空间
        
        return OK;
    }    

    5 出栈

    Status Pop(SqStack *s, SElemType *e) {
    
            if (s->top == -1) {                //空栈
                return ERROR;
            }
    
            *e = s->data[s->top];            //将要删除的栈顶元素赋值给e
            s->top --;                        //栈顶指针减1
    
            return OK;
       }
  • 相关阅读:
    无线传感网3-1.目标物的覆盖技术
    无线传感网2-传感器布局方法
    JAVA 第二周课程总结
    2019春总结作业
    第十二周作业
    第十一周作业
    第十周
    第九周作业
    第八周作业
    第七周作业
  • 原文地址:https://www.cnblogs.com/muzijie/p/5646893.html
Copyright © 2011-2022 走看看