用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
分析:
这里需要两个栈来实现队列的功能。
栈遵循先进后出的原则,队列遵循先进先出的原则。
用第一个栈来存入元素,这时最先进入的元素在栈底,然后将第一个栈中的元素移动到新栈中,这时最先进入的元素就在栈顶了,然后用第二个栈出栈时,整个执行的顺序就变成了先进先出。
class CQueue{
Stack<Integer> inputStack; //第一个栈
Stack<Integer> outputStack;//第二个栈
public CQueue{
inputStack=new Stack();
outputStack=new Stack();
}
public int appendTail(int value){
inputStack.push(value);//push():向栈顶添加元素
}
public void deleteHead(){
if(!outputStack.isEmpty()){
return outputStack.pop(); //弹出元素
}else if(!inputStack.isEmpty()){
while(!inputStack.isEmpty()){
outputStack.push(inputStack.pop);
}
}
return outputStack.isEmpty() ? -1 : outputStack.pop();
}
}