题目
编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)。
解答
必须做到以下两点:
1. 如果stackPush 要往 stackPop 中压入数据,那么必须一次性把stackPush中的数据全部压入。
2. 如果stackPop 不为空,stackPush绝对不能向stackPop中压入数据。
代码
// 用两个栈组成的队列
import java.util.*;
public class TwoStackQueue {
public Stack<Integer> stackPush;
public Stack<Integer> stackPop;
public TwoStackQueue() {
stackPush = new Stack<Integer>();
stackPop = new Stack<Integer>();
}
public void add(int pushInt) {
stackPush.push(pushInt);
}
public int poll() {
if (stackPop.empty() && stackPush.empty()) {
throw new RuntimeException("Queue is empty!");
} else if (stackPop.empty()) {
while (!stackPush.empty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.pop();
}
public int peek() {
if (stackPop.empty() && stackPush.empty()) {
throw new RuntimeException("Queue is empty!");
} else if (stackPop.empty()) {
while (!stackPush.empty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.peek();
}
public static void main(String[] args) {
TwoStackQueue tsq = new TwoStackQueue();
tsq.add(2);
tsq.add(4);
tsq.add(3);
tsq.add(1);
System.out.println(tsq.poll());
System.out.println(tsq.peek());
}
}