标签:
template<typename T>
class QStack
{
public:
QStack(){}
~QStack(){}
void push(T const &);
T pop();
private:
Queue<T> Q1,Q2;
};
template<typename T>
void QStack<T>::push(T const &e)
{
//入栈到非空的队列中,若都空,则任选一个队列,此处选Q2,
if(!Q1.isempty())
Q1.Enqueue(e);
else
Q2.Enqueue(e);
}
template<typename T>
T QStack<T>::pop()
{
//出栈,首先将非空队列中的元素依次出队、入队到另一队列中,直至该非空队列只剩下一个元素,将该元素出队,实现出栈;
//因此在不做插入删除运算时,至少有一个队列是空的。
if(Q1.isempty()&&Q2.isempty())
return NULL;
if(!Q1.isempty())
{
while(Q1.front&&Q1.front!=Q1.rear)
Q2.Enqueue(Q1.Dequeue());
return Q1.Dequeue();
}
if(!Q2.isempty())
{
while(Q2.front&&Q2.front!=Q2.rear)
Q1.Enqueue(Q2.Dequeue());
return Q2.Dequeue();
}
}
队列:队头删除元素;队尾插入元素
标签:
原文地址:http://www.cnblogs.com/hj-blog/p/4432637.html