【数据结构】队列以及两个队列实现一个栈

队列以及两个队列实现一个栈

#pragma once


template <class T>
struct QueueNode
{
public :
    QueueNode( const T& x)
         :_data(x)
         ,_next(NULL)
    {}

    T _data;
    QueueNode* _next;
};


template <class T>
class queue
{
public :
    queue()
         :_head(NULL)
        ,_tail(NULL)
        ,_size(0)
   {}
    ~queue()
    {
         QueueNode<T>* begin = _head;
          while(begin)
         {
             QueueNode<T>* tmp = begin;
             begin = begin->_next ;
             delete tmp;
         }
    }
    T& GetTop()
    {
         
         T* tmp = (T *)_head;
          return *tmp;
    }

     int GetSize()
    {
          return _size;
    }
    bool Emptyqueue()
    {
         if(_head)
             return false ;
         else
             return true ;
    }

     void PushQueue(const T& x)
    {
          //空队列
          //非空
          if(_head == NULL)
         {
             _head = new QueueNode<T>(x);
             _tail = _head;
         }
          else
         {
             _tail->_next = new QueueNode<T>(x);
             _tail = _tail->_next ;
         }
         _size++;

    }
     void PopQueue()
    {
          //空
          //一个
          //两个及以上
          if(_head == NULL)
         {
             cout<< "该队列为空"<<endl;
         }
          else if (_head == _tail)
         {
              delete _head;
             _head = NULL;
             _tail = NULL;
             _size--;
         }
          else
         {
             QueueNode<T>* tmp = _head;
             _head = _head->_next ;
              delete tmp;
             _size--;
         }
    }
    T& operator->()
    {
          return *this ;
    }
private :
    QueueNode<T>* _head;
    QueueNode<T>* _tail;
    int _size;
};




//两个队列实现一个栈
template <class T>
class stack1
{
public :
 
     void pushstack1(const T& x)
     {
          if(!_emptyqueue.Emptyqueue())
         {
            while(!_emptyqueue.Emptyqueue())
             {
                 _noemptyqueue.PushQueue (_emptyqueue.GetTop ());
                 _emptyqueue.PopQueue ();
             }
         }
         _noemptyqueue.PushQueue (x);
    }

     void popstack1()
     {
          if(_noemptyqueue.Emptyqueue())
         {
             cout<< "该栈为空"<<endl;
         }
          while(1)
         {
             T tmp = _noemptyqueue.GetTop ();
             _noemptyqueue.PopQueue ();
              if(!_noemptyqueue.Emptyqueue ())
             {
                 _emptyqueue.PushQueue (tmp);
             }
              else
                  break;
         }
     }

private :
    queue<T> _emptyqueue;
    queue<T> _noemptyqueue;
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值