import java.util.Stack;
/*
* 栈是先进后出,队列是先进先出。所以两个栈相互配合要实现先进先出的效果。用两个栈正好能把顺序反过来实现类似队列的操作。
* 1、如果stack1要往stack2中压入数据,那么必须一次性把stack1中的数据全部压入
* 2、如果stack2不为空,stack1绝对不能向stack2中压入数据
*/
public class Main8 {
Stack<Integer> stack1;
Stack<Integer> stack2;
public Main8() {
stack1 = new Stack<Integer>();
stack2 = new Stack<Integer>();
}
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack1.empty()&&stack2.empty()){
throw new RuntimeException("Queue is Empty!");
}
//出队时在栈2为空的前提下,保障一次性将栈1的内容压入栈2
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
public int peek() {
if(stack1.empty()&&stack2.empty()){
throw new RuntimeException("Queue is Empty!");
}
//出队时在栈2为空的前提下,保障一次性将栈1的内容压入栈2
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.peek();
}
}