/* queue.h */
#ifndef __queue_h__
#define __queue_h__
#include <iostream.h>
extern "c" { void exit(int); }
const int ndefaultqueuesize = 50;
template <class t>
class queue {
private:
t *qlist; //存放队列元素的指针(数组)
int size; //队列大小(容量)
int front; //队首位置
int rear; //队尾位置(最后一个元素的下一位置)
int count; //队列中元素的个数
public:
//构造函数
queue(int initsize=ndefaultqueuesize) {
if (initsize < 1)
initsize = ndefaultqueuesize;
qlist = new t[initsize];
if (!qlist) {
cerr << "存储空间分配失败,应用程序将终止!"
<< endl;
exit(1);
}
front = 0;
rear = 0;
count = 0;
size = initsize;
}
//析构函数
~queue() {
if (qlist) delete [] qlist;
front = 0;
rear = 0;
count = 0;
size = 0;
}
//判断队列是否为空
int qempty() {
return front == rear;
//return count == 0;
}
//判断队列是否已满
int qfull() {
return (rear+1) % size == front;
//return count == size;
}
//队列长度
int qlength() {
return count;
//return (rear - front + size) % size;
}
//队尾插入(追加)元素
void qinsert(const t &item) {
if (count == size) {
cerr << "队列已满,无法再追加元素。"
<< endl;
return;
}
count ++;
qlist[rear] = item;
rear = (rear + 1) % size; //rear始终指向最后一个元素的下一个位置
}
//队首删除元素
t qdelete(t &data) {
if (count > 0) {
data = qlist[front];
count --;
front = (front + 1) % size; //front移向下一位置
}
else
cerr << "队列已空,无法继续删除。" << endl;
return data;
}
//读取队首元素
t qfront(t &data) {
if (count > 0)
data = qlist[front];
else
cerr << "队列为空,无法读取队首元素的值。" << endl;
return data;
}
//清空队列
void clearqueue() {
front = 0;
rear = 0;
count = 0;
}
};
#endif /* !__queue_h__ */
////////////////////////////////////////////////////////////
// queuetest.cpp
#include "queue.h"
void main()
{