栈和队列
Posted 被罚站的树
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和队列相关的知识,希望对你有一定的参考价值。
栈
特点:先进后出
顺序栈:通过数组来实现
共享栈:两个顺序栈共享一个一维数据空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。共享栈是为了更好的利用存储空间
链栈:通过链表(单链表,头插法)来实现栈的功能,其特点栈不会上溢
队列
特点:先进先出
顺序队列:队头指针front,队尾指针rear。当元素出队front指针后移,当元素入队rear指针后移。缺点:但front和rear都指向队列的最大容量处后,这时队列虽然有存储空间,但是无法在存储数据
循环队列:逻辑上将队列看成一个环,成为循环队列。使用循环队列可以使得存储空间重复利用,克服了顺序队列的缺点。但是需要注意的是要区分循序队列的空和满(队尾指针并不指向队尾元素,而是指向下一空元素。队满的标志是队尾指针的下一个位置是队头指针。队空的标志是队头指针和队尾指针指向对一个位置)
链队列:用链表的方式来实现队列的功能,从链表的头取,从链表的尾插。
双端队列:双端队列允许两端都可以入队和出队,它既有栈的特性也有队列的特性。但是我们平时使用的都是受限的双端队列。
输出受限的双端队列:允许在一端进行插入和删除,但在另一端只允许插入的双端队列称为输出受限的双端队列
输入受限的双端队列:允许在一端进行插入和删除,但在另一端只允许删除的双端队列成为输入受限的双端队列
例题
- 若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续3次进行退栈操作,则可能得到的出栈序列有哪些?
- 设栈S和队列Q的初始状态为空,元素abcdefg依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是bdcfeag,则栈S的容量至少是多少
- 一个栈的入栈顺序是1、2、3....n,其出栈序列是p1,p2,p3....pn。若p2=3,则p3可能取值的个数是多少
- 已知循环队列存储在一维数组A[0...N-1]中,且队列非空时front和rear分别指向队头元素和队尾元素,若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是多少
- 某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。若元素a、b、c、d、e依次进入此队列后再进行出队操作,则可能的出队序列有哪些?
以上是关于栈和队列的主要内容,如果未能解决你的问题,请参考以下文章