题目:编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek).
栈的特点是先进后出,而队列的特点是先进先出,我们可以用两个栈正好顺序反过来实现类似队列操作。
分析:
具体实现上是一个栈作为压入栈,在压入数据时指望这个栈中压入,即为stackPush,另一个只作为弹出栈,在弹出数据时只从这个栈弹出,即为stackPop。虽然简单,但是要注意两点:
1.如果stackPush要往stackPop中压入数据,必须一次性把stackPush中的数据全部压入。
2.如果stackpop不为空,不能压入数据。
代码如下:
public class UseStackDoQueue {
private static Stack<Integer> stackPush = new Stack<>();
private static Stack<Integer> stackPop = new Stack<>();
public static void push(int num) {
stackPush.push(num);
}
public static int peek() {
if (stackPush.isEmpty() && stackPop.isEmpty()) {
throw new RuntimeException("your queue is empty!");
} else if (stackPop.isEmpty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.peek();
}
public static int pop() {
if (stackPush.isEmpty() && stackPop.isEmpty()) {
throw new RuntimeException("your queue is empty!");
} else if (stackPop.isEmpty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.pop();
}
}