类定义:
#include<iostream>
using namespace std;
template<class T>
class Node {
public:
T data;
Node* next;
};
template<class T>
class Queue {
private:
Node<T>* front;
Node<T>* rear;
public:
Queue();
~Queue();
bool QueueEmpty();
void enQueue(T e);
bool deQueue(T &e);
void DispQueue();
};
类中方法实现:
template<class T>
Queue<T>::Queue() {
front = NULL;
rear = NULL;
}
template<class T>
Queue<T>::~Queue() {
Node<T>* p = front, * r;
if (p != NULL) {
r = p->next;
while (r != NULL) {
delete p;
p = r;
r = p->next;
}
}
delete p;
delete this;
}
template<class T>
bool Queue<T>::QueueEmpty() {
return this->rear == NULL;
}
template<class T>
void Queue<T>::enQueue(T e) {
Node<T>* p;
p = new Node<T>();
p->data = e;
p->next = NULL;
if (QueueEmpty()) {
front = rear = p;
}
else {
rear->next = p;
rear = p;
}
}
template<class T>
bool Queue<T>::deQueue(T& e) {
if (QueueEmpty())
return false;
Node<T>* q = front;
e = q->data;
if (front == rear) {
front = rear = NULL;
}
else {
front = q->next;
}
delete q;
return true;
}
template<class T>
void Queue<T>::DispQueue() {
if (QueueEmpty()) {
cout << "the queue is empty." << endl;
return;
}
Node<T>* p = front;
while (p != rear) {
cout << p->data << " ";
p = p->next;
}
cout << p->data << endl;
}
主函数测试结果:
int main() {
Queue<int> qu;
int e;
qu.DispQueue();
qu.enQueue(3);
qu.enQueue(4);
qu.enQueue(5);
qu.enQueue(6);
qu.DispQueue();
qu.deQueue(e);
qu.enQueue(10);
qu.DispQueue();
qu.deQueue(e);
qu.deQueue(e);
qu.DispQueue();
return 0;
}