思路
栈的特点:先进后出,队列的特点:先进先出。因此可想到用两个栈,其中一个正序存储,另一个逆序存储,以此实现队列的特点。使用两个栈,入队栈stackPush和出队栈stackPop;入队使用入队栈,出队使用出队栈;但要注意两点: 1. 转移元素前出队栈为空 2. 转移元素后入队栈为空。否则结果将出错。
import java.util.Stack;
import java.util.Scanner;
class MyQueue {
private Stack<Integer> stackPush;
private Stack<Integer> stackPop;
public MyQueue() {
stackPush = new Stack<Integer>();
stackPop = new Stack<Integer>();
}
public void pushToPop() {
if(stackPop.isEmpty()) {
while(!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
}
public void add(int pushInt) {
stackPush.push(pushInt);
pushToPop();
}
public int poll() {
if(stackPop.isEmpty() && stackPush.isEmpty()) {
throw new RuntimeException("Queue is empty.");
}
pushToPop();
return stackPop.pop();
}
public int peek() {
if(stackPop.isEmpty() && stackPush.isEmpty()) {
throw new RuntimeException("Queue is empty.");
}
pushToPop();
return stackPop.peek();
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MyQueue myQueue = new MyQueue();
int steps = sc.nextInt();
for(int i=0; i<steps; i++) {
String op = sc.next();
if(op.equals("add")) {
int t = sc.nextInt();
myQueue.add(t);
}
else if(op.equals("poll")) {
myQueue.poll();
}
else if(op.equals("peek")) {
System.out.println(myQueue.peek());
}
}
}
}