使用棧實現隊列的下列操作:
push(x) -- 將一個元素放入隊列的尾部。
pop() -- 從隊列首部移除元素。
peek() -- 返回隊列首部的元素。
empty() -- 返回隊列是否爲空。
import java.util.Stack;
public class MyQueue {
private Stack<Integer> stackPush;
private Stack<Integer> stackPop;
/**
* Initialize your data structure here.
*/
public MyQueue() {
stackPush = new Stack<>();
stackPop = new Stack<>();
}
/**
* Push element x to the back of queue.
*/
public void push(int x) {
stackPush.push(x);
}
/**
* 輔助方法:一次性將 stackPush 裏的所有元素倒入 stackPop
* 注意:1、該操作只在 stackPop 裏爲空的時候才操作,否則會破壞出隊入隊的順序
* 2、在 peek 和 pop 操作之前調用該方法
*/
public void shift() {
if (stackPop.empty()) {
while (!stackPush.empty()) {
stackPop.push(stackPush.pop());
}
}
}
/**
* Removes the element from in front of queue and returns that element.
*/
public int pop() throws Exception {
shift();
if (!stackPop.isEmpty()) {
return stackPop.pop();
}
throw new RuntimeException("隊列裏沒有元素");
}
/**
* Get the front element.
*/
public int peek() {
shift();
if (!stackPop.isEmpty()) {
return stackPop.peek();
}
throw new RuntimeException("隊列裏沒有元素");
}
/**
* Returns whether the queue is empty.
*/
public boolean empty() {
return stackPop.empty() && stackPush.empty();
}
}