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

c-queue?

2013-11-06 09:59 316 查看
#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();       			// 返回真,若队列已满
}

template <class T>
class arrQueue: public Queue<T> {
private:
int 	mSize; 						// 存放队列的数组的大小
int 	front;							// 表示队头所在位置的下标
int 	rear;							// 表示队尾所在位置的下标
T 	    *qu;							// 存放类型为T的队列元素的数组
public: 								// 队列的运算集
arrQueue(int size)  {    				// 创建队列的实例
mSize = size +1;					// 浪费一个存储空间,以区别队列空和队列满
qu = new T[mSize];
front = rear = 0;
}
~arrQueue()  {  					// 消除该实例,并释放其空间
delete [] qu;
}
void clear() {						// 清空队列
front = rear;
}
bool enQueue(const T item)  { 			//  item入队,插入队尾
if (((rear + 1 ) % mSize) == front) {
cout << "队列已满,溢出" << endl;
return false;
}
qu[rear] = item;
rear = (rear +1) % mSize;  			// 循环后继
return true;
}
bool deQueue(T*item)  {     			// 返回队头元素并从队列中删除
if ( front == rear)  {
cout << "队列为空" << endl;
return false;
}
*item = qu[front];
front = (front +1) % mSize;
return true;
}
bool getFront(T* item) {	     			// 返回队头元素,但不删除
if (front == rear)  {
cout << "队列为空" << endl;
return false;
}
*item = qu[front];
return true;
}
void print() {	     			// 返回队头元素,但不删除
if (front == rear)  {
cout << "队列为空" << endl;
}
int p = front;
while(p != rear ) {
cout << qu[p] << " ";
p =( p + 1)  % mSize;
}
cout << endl;
}
};

int main(int argc, char *argv[])
{
arrQueue<int> *tst;

tst = new arrQueue<int>(10);

int n,r ;
cin >> n;
while (n>0) {
tst->enQueue(n);
n--;
}
tst->print();

cin >> n;
tst->deQueue(&r);

cout << "deleted is : " << r << endl;

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

tst->print();

cin >> n;

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