力扣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,所以是双端队列。