剑指offer:用两个栈实现一个队列
Posted huanglf714
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:用两个栈实现一个队列相关的知识,希望对你有一定的参考价值。
题目
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
用一个栈A来保存入栈,当要出栈的时候,将栈A的元素按照栈后进先出的特点转移到栈B中(此时栈A为空了)
此时栈B中元素的保存顺序就是从上到下按照元素的进入顺序排列的,队列的pop操作只要按顺序拿取栈B的栈顶元素即可
再有新元素入栈时,将将栈B的元素在装回A栈之后在装新元素
代码
1 Stack<Integer> stack1 = new Stack<Integer>(); 2 Stack<Integer> stack2 = new Stack<Integer>(); 3 4 public void push(int node) 5 while(!stack2.empty()) 6 stack1.push(stack2.pop()); 7 8 stack1.push(node); 9 10 11 public int pop() 12 while(!stack1.empty()) 13 stack2.push(stack1.pop()); 14 15 return stack2.pop(); 16
扩展
用两个队列来实现一个栈,完成栈的Push和Pop操作。 栈中的元素为int类型。
入栈:将元素入队列A
出栈:判断队列A的长度是否为1,若为1则出队列,否则将队列A的元素依次拿出并保存在队列B中直到队列A中剩一个元素,然后将这个元素出队列,
然后将队列B的元素装回队列A
与栈实现队列的区别:
用队列模拟栈的时候,出栈之后要把队列B的元素在装回队列A中,否则队列A为空,遇到接连的出栈操作情况就会出错
但是用栈模拟队列的时候,连续出队列操作可以连续从栈B中取栈顶元素,直到入栈操作才把栈B中的元素装入栈A
以上是关于剑指offer:用两个栈实现一个队列的主要内容,如果未能解决你的问题,请参考以下文章