题目描述:使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty)
class MyQueue {
Stack<Integer> StackIn;
Stack<Integer> StackOut;
public MyQueue() {
StackIn=new Stack<>();
StackOut=new Stack<>();
}
public void push(int x) { //将元素x加入队列末尾
StackIn.push(x);
}
public int pop() { //队列开头元素移除并返回该元素
if(StackOut.empty()){
while(!StackIn.empty()){
StackOut.push(StackIn.pop());
//java里pop()会把栈顶元素弹出,并且返回栈顶元素
}
}
int result=StackOut.pop();
return result;
}
public int peek() { //返回队列开头元素,注意与pop()的区别,peek只是获取元素
int result=this.pop();
StackOut.push(result);
return result;
}
public boolean empty() { //判断队列是否为空
return StackOut.empty()&StackIn.empty();
}
}
/**
* 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();
*/