数据结构--------(堆栈 和 队列)

Posted 笑傲江湖未平生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--------(堆栈 和 队列)相关的知识,希望对你有一定的参考价值。

1、栈

        1、定义:只允许从一端插入或删除的线性表。逻辑结构:元素相邻;物理存储结构:顺序栈 和 链式栈;运算:只能从一端操作,受限的线性表

         2、栈的基本操作: InintStack、StackEmpty、pop 、push 、peek(GetTop)、ClearStack(6个)

         3、顺序栈:利用一组连续地址存储单元存储自栈底到栈顶的元素,同时附有一个指针指向当前栈顶的位置

                                           3.1  顺序栈操作: 初始时 S.top = -1;栈顶元素值:S.data[S.top]

                                                                              进栈操作:首先判断是否栈满,不满进栈,栈顶元素加一(S.data[++S.top] = data)

                                                                              出栈操作:判断是否栈空,不空,出栈,栈顶元素减一 data = S.data[S.top--]

                                                                              栈空条件: S.top = -1;

                                                                              栈满条件:S.top = MaxSize - 1 (从0是第一个)

                                           3.2  共享找 : 让两个顺序栈共享一个一维数组,两个栈的栈底分别为数组两端,判满:S1.top - S0.top = 1;

          4、链式栈: 不存在栈满的情况

2、队列:

           1、 队列也是受限的线性表,只允许从一端插入,另一端进行删除,Front队头允许删除的一端,Rear队尾

插入的一端

            2、顺序存储的队列:初始 Q.rear  == Q.front ==0;

                                                                       入队:  不满,入队,rear + 1;

                                                                       出队:不空,出队,front - 1;

            3、循环队列:当队首指针达到MaxSize - 1时 可以继续添加 到首端0

                                                     初始: Q.rear === Q.front==0;

                                                     入队:如果不满,Q.rear  = (Q.rear +1)%MaxSize

                                                     出队:如果不空,Q.front = (Q.front - 1)%MaxSize

                                                     队列长度:(Q..rear - Q.front + MaxSize) % MaxSize

                                                     判空方法:  a,牺牲一个单位元素来区分队空:  判满 (Q.rear + 1)%MaxSize==Q.front

                                                                                                                               判空 Q.rear == Q.front

                                                                                                                               元素个数:(Q.rear - Q.front + MaxSize) %MaxSize

                                                                         b.用一个额外的元素count记录队列中数目,count==MaxSize  队满

            4、双端队列:两端均可以 入队 出队;受限的双端队列  只有一端可以出队或者其他,两端均可入队等

            5、堆栈的应用:   a、括号匹配

                                                                 b,表达式求值  还有  递归

以上是关于数据结构--------(堆栈 和 队列)的主要内容,如果未能解决你的问题,请参考以下文章

堆栈和队列

数据结构-堆栈和队列最简单的实现(Python实现)

JavaScript的数组实现队列与堆栈的方法

数据结构--------(堆栈 和 队列)

队列和堆栈

python列表实现堆栈和队列