用两个栈实现队列
思想
队列:先进先出
栈:先进后出
- 为达到先进先出的效果,需要一个栈用于放入,一个栈用于弹出;
- 再弹出前,需要将栈1元素全放入栈2-》先进的元素在栈顶
- 新放入的元素继续加入栈1中
- 临界条件:2个栈元素均为空
Java代码
class CQueue {
Stack<Integer> s1;
Stack<Integer> s2;
public CQueue() {
// 初始化两个栈
s1 = new Stack<Integer>();
s2 = new Stack<Integer>();
}
public void appendTail(int value) {
// 直接加入栈1即可
s1.push(value);
}
// 队列是先进先出,必须得先把栈二元素用完了,再加入
public int deleteHead() {
// 判断栈二是否还有元素删除
if(!s2.isEmpty()){
// 直接删除栈顶元素
return(s2.pop());
}else{
if(s1.isEmpty()) return -1;
// 将栈1元素全转入栈2中
while(!s1.isEmpty()){
s2.push(s1.pop());;
}
return(s2.pop());
}
}
}