码迷,mamicode.com
首页 > 其他好文 > 详细

使用两个队列实现一个栈

时间:2015-04-16 19:38:29      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!