c++模板实现的队列

 

/************************************************************************/

/* 队列节点类                                                                                                                       */

/************************************************************************/

template <class T>

class LinkedNode

{

       public:

              LinkedNode<T> *next;//指向下一个节点的指针

              T data;//数据域

              LinkedNode(const T& data, LinkedNode<T> *next);

              LinkedNode(const T& data);

              LinkedNode();

              //使用默认的析构函数

};

 

 

/************************************************************************/

/*前提条件:类T必须有无参数的构造函数                                                                     */

/************************************************************************/

template <class T>

LinkedNode<T>::LinkedNode():next(0)

{

}

 

 

template <class T>

LinkedNode<T>::LinkedNode(const T& data):next(0), data(data)

{

}

 

 

template <class T>

LinkedNode<T>::LinkedNode(const T& data, LinkedNode<T> *next):data(data), next(next)

{

}

 

 

/************************************************************************/

/* 对列类                                                                                                                               */

/************************************************************************/

template <class T>

class Queue{

       public:

              LinkedNode<T> *head;

        LinkedNode<T> *tail;

        Queue();

              ~Queue();

              bool EnQueue(const T& data);

        bool DeQueue(T& data);

              int  GetLength() const;

              bool IsEmpty() const;

};

 

 

template <class T>

Queue<T>::Queue()

{

       head = new LinkedNode<T>();

       tail = head;

}

 

 

template <class T>

Queue<T>::~Queue()

{

    LinkedNode<T>* first = 0;

       while(head)

       { 

              first = head;

              head = head->next;

              delete first;

       }

}

 

 

/************************************************************************/

/*入队                                                                    */

/************************************************************************/

template <class T>

bool Queue<T>::EnQueue(const T& data)

{

       LinkedNode<T> *element = new LinkedNode<T>(data);

       if(!element) return false;

       this->tail->next = element;

       this->tail = element;

       return true;

}

 

 

/************************************************************************/

/* 出对                                                                                                                                 */

/************************************************************************/

template <class T>

bool Queue<T>::DeQueue(T& data)

{

       if(!head->next)

       {

              return false;

       }

 

 

       //对列只有一个元素

       if(head->next == tail)

       {

              tail = head;

       }

       data = head->next->data;

       LinkedNode<T>* temp;

       temp = head->next;

       head->next = head->next->next;

       delete temp;

    return true;

}

 

 

/************************************************************************/

/* 获取对列长度                                                                                                                  */

/************************************************************************/

template <class T>

Queue<T>::GetLength() const

{

       int size = 0;

    LinkedNode<T>* first = head->next;

       while(first)

       {

              size++;

              first = first->next;

       }

 

 

       return size;

}

 

 

/************************************************************************/

/* 判断队列是否为空                                                                                                                                          */

/************************************************************************/

template <class T>

bool Queue<T>::IsEmpty() const

{

       return (head == tail) ? true : false; 

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值