// abstract data type for queue
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 itemCount; // 存放队列中数组实际个数
int front; // 表示队头所在位置的下标
int rear; // 表示队尾所在位置的下标
T *qu; // 存放类型为T的队列元素的数组
public: // 队列的运算集
arrQueue(int size) // 创建队列的实例
{
mSize = size; // 浪费一个存储空间,以区别队列空和队列满
qu = new T[mSize];
front = rear = 0;
itemCount = 0;
}
~arrQueue() // 消除该实例,并释放其空间
{
delete []qu;
}
void clear() // 清空队列
{
front = rear;
itemCount = 0;
}
bool enQueue(const T item) // item入队,插入队尾
{
if (itemCount == mSize)
{
cout << "The queue is Full!" << endl;
return false;
}
qu[rear] = item;
rear = (rear +1) % mSize; // 循环后继
++itemCount;
return true;
}
bool deQueue(T*item) // 返回队头元素并从队列中删除
{
if ( 0 == itemCount)
{
cout << "The queue is empty!" << endl;
return false;
}
*item = qu[front];
front = (front +1) % mSize;
--itemCount;
return true;
}
bool getFront(T* item) // 返回队头元素,但不删除
{
if (0 == itemCount)
{
cout << "The queue is empty!" << endl;
return false;
}
*item = qu[front];
return true;
}
void print() // 打印队列中的所有元素
{
if (0 == itemCount)
{
cout << "The queue is empty" << endl;
}
int p = front;
for(int i = 0; i < itemCount; i++)
{
cout << qu[p+i] << " ";
}
}
};
顺序队列类定义
最新推荐文章于 2022-08-01 11:59:07 发布