题目:
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
):
实现 MyQueue
类:
void push(int x)
将元素 x 推到队列的末尾int pop()
从队列的开头移除并返回元素int peek()
返回队列开头的元素boolean empty()
如果队列为空,返回true
;否则,返回false
思路:需要用两个栈,一个作为输入栈,一个作为输出栈实现队列功能。
Stack类有函数empty(),pop(),peek(),push(x),search(object)。
代码:
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn=new Stack<>();
stackOut=new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
dumpstackin();
return stackOut.pop();
}
public int peek() {
dumpstackin();
return stackOut.peek();
}
public boolean empty() {
return stackIn.empty()&&stackOut.empty();
}
private void dumpstackin(){
if(!stackOut.empty())
return;
while(!stackIn.empty()){
stackOut.push(stackIn.pop());
}
}
}