template<class T>
class Queue
{
Queue(void);
~Queue(void);
void appendTail(const T &val);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}上述队列中包含两个栈stack1,stack2;
当有元素a,b,c,插入stack1中时,stack1入栈元素为a,b,c,当要删除元素a时可以利用stack2完成。
把stack1元素插入到stack2中入栈顺序为c,b,a,也就是从stack1弹出元素(栈是后进先出)插入到stack2
中。然后在删除元素a。
给出实现代码:
template<class T>
void Queue::appendTail(const T &val)
{
stack1.push(val); //先把元素插入到stack1中
}
template<class T>
T Queue::deleteHead()
{
if(stack2.size()<=0)
{
while(stack1.size()>0) //依次循环,直到stack1没有元素
{
T &data=stack.top(); //把stack1栈顶元素赋给data
stack1.pop(); //弹出元素
stack2.push(data); //把data压入stack2中
}
}
if(stack2.size()==0)
throw new exception("queue is empty");
T Head=stack2.top();
stack2.pop();
return Head;
}