用2个栈实现队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,先进入的元素先退出,这就是队列的顺序。
Stack<Integer> in = new Stack<Integer>();
Stack<Integer> out = new Stack<Integer>();
//进栈方法, 不用变
public void push(int num){
in.push(num);
}
//出栈方法
public void pop() throws Exception{
//判断out栈是不是空的
if(out.isEmpty){
/*in 栈非空,则一直往out栈里面添加元素,使得in栈的第一个
元素变为out栈最后一个元素
*/
while(!in.isEmpty()){
// out栈里面push进去in栈的pop元素
out.push(in.pop());
}
}
//如果out栈还是为空的话,就抛出异常
if(out.isEmpty()){
throw new Exception("queue is empty");
}
return out.pop();
}
}