续关于栈的学习-03
栈实现队列
问题描述
用两个栈实现队列,使其支持队列的基本操作(add,poll,peek).
求解思路
利用栈先进后出的特点,将压入和弹出分别在一个栈中进行。选一个栈为压入栈,将数据按先后顺序依次压入栈中;选另一个栈为弹出栈,当执行取操作时,先将压入栈中的数据依次压入弹出栈中,再按出栈顺序从弹出栈中依次弹出,实现类似队列的先进先出操作。
java程序如下
public class MyQueue{
/**压入栈*/
public Stack<Integer> stackPush;
/**弹出栈*/
public Stack<Integer> stackPop;
public MyQueue(){
stackPush = new Stack<Integer> ;
stackPop = new Stack<Integer> ;
}
public void add(int x){
/**执行压入操作*/
stackPush.push(x);
}
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();
}
}
**题目及思路来源----《程序员代码面试指南》左程云