您的位置:首页 > 产品设计 > UI/UE

Queue

2013-11-06 09:57 176 查看
#include <cstdlib>
#include <iostream>
using namespace std;

template <class T>
class Queue  {
public: 			        		// 队列的运算集
void clear();					// 变为空队列
bool enQueue(const T item); 		// item入队,插入队尾,成功则返回真否则返回假
bool deQueue(T item);     	// 返回队头元素并从队列中删除,成功则返回真
bool front(T* item);	       	// 返回队头元素,但不删除,成功则返回真
bool isEmpty(); 				// 返回真,若队列已空
bool isFull();       			// 返回真,若队列已满
void print();
};

template <class T> class Link {
public:
T  		data;							// 用于保存结点元素的内容
Link 	* next;						// 指向后继结点的指针

Link(const T info, Link* nextValue = NULL)  {	// 具有两个参数的Link构造函数
data = info;
next = nextValue;
}
Link(Link* nextValue = NULL)  { 			// 具有一个参数的Link构造函数
next = nextValue;
}
};

template <class T>
class lnkQueue: public Queue <T> {
private:
int 		size; 							// 队列中当前元素的个数
Link<T>* front;							// 表示队头的指针
Link<T>* rear;							// 表示队尾的指针
public: 									// 队列的运算集
lnkQueue(int size)  {    					// 创建队列的实例
size = 0;
front = rear = NULL;
}
~lnkQueue()  {  						// 消除该实例,并释放其空间
clear();
}
void clear() {							// 清空队列
while (front != NULL) {
rear = front;
front = front->next;
delete rear;
}
rear = NULL;
size = 0;
}
bool enQueue(const T item) { 				//  item入队,插入队尾
if (rear == NULL) 	{				// 空队列
front = rear = new Link<T> (item, NULL);
}
else  {							// 添加新的元素
rear-> next = new Link<T> (item, NULL);
rear = rear ->next;
}
size++;
return true;
}
bool deQueue(T* item)  {          			// 返回队头元素并从队列中删除
Link<T> *tmp;
if (size == 0)  {						// 队列为空,没有元素可出队
cout << "队列为空" << endl;
return false;
}
*item = front->data;
tmp = front;
front = front -> next;
delete tmp;
if (front == NULL)
rear = NULL;
size--;
return true;
}
bool getFront(T* item)  {	       				// 返回队头元素,但不删除
if (size == 0)  {						// 队列为空,没有元素可出队
cout << "队列为空" << endl;
return false;
}
*item = front->data;
return true;
}
void print() {	     			// 返回队头元素,但不删除
if (front == NULL)  {
cout << "队列为空" << endl;
}
Link<T>*p = front;
while(p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
};

int main(int argc, char *argv[])
{
lnkQueue<int> *tst = new lnkQueue<int>(0);
int n;

cin >> n;
for (int i=0; i<n;i++)
tst->enQueue(i);
tst->print();
cin >> n;

tst->deQueue(&n);
cout << "the deleted front is:" << n << endl;
cin >>n;

tst->getFront(&n);
cout << "the front is:" << n << endl;

cin >> n;

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