使用两个队列实现一个栈

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();
   }
}

队列:队头删除元素;队尾插入元素

posted @ 2015-04-16 17:08  hy1hy  阅读(130)  评论(0编辑  收藏  举报