用两个栈实现队列

Posted 我们都是大好青年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用两个栈实现队列相关的知识,希望对你有一定的参考价值。

栈的特点是后进先出,即最后别呀如栈的元素会第一个被弹出(pop)。

队列是另外一个很重要的数据结构。和栈不同的是,队列的特点是先进先出,即第一个进入队列的元素将会第一个出来。

题目:用两个栈是新啊一个队列。队列的声明那个如下,请实现它的两个函数apeendTail和deleteHead,分别完成在对垒尾部插入节点和在队列头部删除节点的功能。

解题思路:一个队列包含了两个栈stack1和stack2,因此这道题的意图是要求我们操作这两个“先进后出”的栈实现一个“先进先出”的队列CQueue.

在stack1中按顺序压入“a,b,c”,把stack1中的元素逐个弹出并压入到stack2中“c,b,a”.这样逐个弹出就可以了。

总结删除一个元素的步骤:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。如果stack2为空时,我们把stack1中的元素逐个弹出并压入stack2。由于先进入队列的元素被压到stack1的地段,经过弹出和压入之后就处于stack2的顶端了,又可以直接弹出。

过程如下图所示

 

以上是关于用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章

用两个栈实现队列

用两个栈实现队列的POP和PUSH操作

双栈实现队列剑指 Offer 09. 用两个栈实现队列

题目七:用两个栈实现队列

用两个栈实现队列-剑指Offer

用两个栈实现一个队列