用两个栈实现队列
栈的特点是后进先出,即最后别呀如栈的元素会第一个被弹出(pop)。
队列是另外一个很重要的数据结构。和栈不同的是,队列的特点是先进先出,即第一个进入队列的元素将会第一个出来。
题目:用两个栈是新啊一个队列。队列的声明那个如下,请实现它的两个函数apeendTail和deleteHead,分别完成在对垒尾部插入节点和在队列头部删除节点的功能。
解题思路:一个队列包含了两个栈stack1和stack2,因此这道题的意图是要求我们操作这两个“先进后出”的栈实现一个“先进先出”的队列CQueue.
在stack1中按顺序压入“a,b,c”,把stack1中的元素逐个弹出并压入到stack2中“c,b,a”.这样逐个弹出就可以了。
总结删除一个元素的步骤:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。如果stack2为空时,我们把stack1中的元素逐个弹出并压入stack2。由于先进入队列的元素被压到stack1的地段,经过弹出和压入之后就处于stack2的顶端了,又可以直接弹出。
过程如下图所示