您的位置:首页 > 编程语言 > C语言/C++

c++模板实现的队列

2005-08-27 19:20 537 查看
/************************************************************************/

/* 队列节点类 */

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

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: