题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个方法,appendTail和deleteHead,分别完成在队列尾部插入节点的在队列头部删除节点的功能。
template<typename T>class Queue{
public:
Queue();
~Queue();
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
队列是先进先出的数据结构,栈是后进先出的数据结构,用两个栈来模拟队列,可以用一个栈来存放进入元素,也就是说,这个栈来进行appendTail()操作;用另一个栈来弹出元素,即用来进行deleteHead()操作,当两个栈都为空时,队列为空。
代码:
tmplate<typename T>
void Queue<T>::appendTail(const T& element){
stack1.push(element);
}
template<typename T>
T Queue<T>::deleteHead(){
if(stack2.empty()){ //如果stack2为空
while(!stack1.empty(){ //那么就将stack1中的所有元素Push到stack2中
T& data = stack1.top(); //此时statck2栈顶是最先进入到队列(stack1)中的元素
stack1.pop();
stack2.push(data);
}
}
if(stack2.empty()){
cout<<"queue is empty!\n"; //如果两个栈都为空
throw new exception();
}
T head = stack2.top();
statck2.pop();
return head; //返回stack2栈顶元素
}