文章目录
- 力扣232-用栈实现队列
- 示例
- 代码实现
- 总结收获
力扣232-用栈实现队列
示例
代码实现
class MyQueue {Deque<Integer> instack;Deque<Integer> outstack ;public MyQueue() {instack=new ArrayDeque<Integer>();outstack=new ArrayDeque<Integer>();}public void push(int x) {instack.push(x);}public int pop() {if(outstack.isEmpty()){toout();}return outstack.pop();}public int peek() {if(outstack.isEmpty()){toout();}return outstack.peek();}public boolean empty() {return instack.isEmpty()&&outstack.isEmpty();}public void toout(){while(!instack.isEmpty()){outstack.push(instack.pop());}}
}/*** Your MyQueue object will be instantiated and called as such:* MyQueue obj = new MyQueue();* obj.push(x);* int param_2 = obj.pop();* int param_3 = obj.peek();* boolean param_4 = obj.empty();*/
总结收获
将一个栈当作输入栈,用于压入 push传入的数据;另一个栈当作输出栈,用于 pop 和 peek操作。每次 pop 或 peek时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。
这里具体实现用的是双端队列Deque表示栈的嗷,效率更高
科普一个小tips,Deque中的D就是double,e表示edge,所以是双端队列。