您的位置:首页 > 其它

双端队列(链表表示)

2009-05-10 10:33 316 查看
 

#ifndef LINKEDDEQUE_H
#define LINKEDDEQUE_H
 
#include <iostream>
#include <assert.h>
using namespace std;
 
template<class T>
struct LinkNode        //链式队列节点类的定义
{
     T data;  //数据域
     LinkNode<T> *link; //链指针域
     LinkNode(LinkNode<T> *ptr = NULL)    //仅初始化指针成员的构造函数
     {
         link = ptr;
     }
     LinkNode(const T &item,LinkNode<T> *ptr = NULL)    //初始化数据与指针成员的构造函数
     {
         data = item;
         link = ptr;
     }
};
 
template<class T>
class LinkedDeque
{
public:
     LinkedDeque():front(NULL),rear(NULL){}
     ~LinkedDeque()
     {
         MakeEmpty();
     }
     void MakeEmpty();  //置空队列
     bool IsEmpty()const
     {
         return (front == NULL) ? true : false;
     }
     bool GetHead(T& x)const;
     bool GetTail(T& x)const;
     bool EnQueue(const T& x);
     bool EnQueueHead(const T& x);
     bool EnQueueTail(const T& x);
     bool DeQueue(T &x);
     bool DeQueueHead(T &x);
     bool DeQueueTail(T &x);
private:
     LinkNode<T> *front,*rear;   //队头、队尾指针
};
 
template<class T>
void LinkedDeque<T>::MakeEmpty()
{
     LinkNode<T> *p;
     while(front != NULL)
     {
         p = front;
         front = front->link;
         delete p;
     }
}
 
template<class T>
bool LinkedDeque<T>::GetHead(T &x) const
{
     if(IsEmpty() == true)
         return false;
     x = front->data;
     return true;
}
 
template<class T>
bool LinkedDeque<T>::EnQueueTail(const T &x)
{
     return EnQueue(x);
}
 
template<class T>
bool LinkedDeque<T>::DeQueueHead(T &x)
{
     T temp;
     bool tag = LinkedDeque<
c981
;T>::DeQueue(temp);
     x = temp;
     return tag;
}
 
template<class T>
bool LinkedDeque<T>::GetTail(T& x)const
{
     if(IsEmpty() == true)
         return false;
     x = rear->data;
     return true;
}
 
template<class T>
bool LinkedDeque<T>::EnQueueHead(const T &x)
{
     LinkNode<T> *p = new LinkNode<T>(x);
     if(p == NULL)
         return false;
     p->link = front;
     front = p;
     return true;
}
 
template<class T>
bool LinkedDeque<T>::DeQueueTail(T &x)
{
     if(IsEmpty() == true)
         return false;
     LinkNode<T> *p = front;
     while(p->link != rear)
         p = p->link;
     x = rear->data;
     delete rear;
     p->link = NULL;
     rear = p;
     return true;
}
 
#endif
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null delete