/*
说明:这些例子来自 左程云著的《程序员代码面试指南 IT名企算法与数据结构题目最优解》。代码中的注释是自己的理解。
*/
/*
【题目】编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)
【解答】栈的特点是先进后出,而队列的特点是先进先出。用两个栈正好能把顺序反过来实现类似队列的操作。
*/
import java.util.*;
public class TwoStackQueue{
public Stack<Integer> queueTail;//队列尾部
public Stack<Integer> queueHead;//队列头部
public TwoStackQueue(){
this.queueTail = new Stack<Integer>();
this.queueHead = new Stack<Integer>();
}
public void add(int pushInt){
queueTail.push(pushInt);//往队列尾部push元素
}
public int poll(){//出队
if(this.queueTail.empty() && this.queueHead.empty()){
throw new RuntimeException("queue is empty!");
}else if(queueHead.empty()){
while(!queueTail.empty()){//队列尾部一直push
queueHead.push(queueTail.pop());//队列头部是pop,队列尾部是push
}
}
return queueHead.pop();
}
/*
*获取队列头部
*/
public int peek(){
if(queueHead.empty() && queueTail.empty()){
throw new RuntimeException("queue empty!");
}else if(queueHead.empty()){
while(!queueTail.empty()){
queueHead.push(queueTail.pop());
}
}
return queueHead.peek();
}
}
public class TestTwoStackQueue{
public static void main(String[] args){
TwoStackQueue queue = new TwoStackQueue();
queue.add(1);
queue.add(2);
queue.add(3);
queue.add(4);
queue.add(5);
queue.add(6);
System.out.println("队列头部:" + queue.peek());
System.out.println(queue.poll() + " 出队");//出队
System.out.println("队列头部:" + queue.peek());
System.out.println(queue.poll() + " 出队");//出队
System.out.println("队列头部:" + queue.peek());
}
}
输出结果: