myQueue.h
//myQueue.h
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(); // 返回真,若队列已满
} ;
arrQueue.h
//arrQueue.h
#include <cstdlib>
#include <iostream>
#include "myQueue.h"
using namespace std;
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;
}
void print() { // 输出队列
if (front == rear) {
cout << "队列为空" << endl;
}
int p = front;
while(p != rear ) {
cout << qu[p] << " ";
p =( p + 1) % mSize;
}
cout << endl;
}
bool enQueue(const T item); // item入队,插入队尾。注意:队满。item亦可为引用
bool deQueue(T*item); // 返回队头元素并从队列中删除。注意:队空。item亦可为引用
bool getFront(T* item); // 返回队头元素,但不删除注意:队空。item亦可为引用
};
template<class T>
bool arrQueue<T>::enQueue(const T item)
{
if(((rear+1)%mSize)==front)
{
cout<<"队列已满,溢出"<<endl;
return false;
}
qu[rear]=item;
rear=(rear+1)%mSize;
return true;
}
template<class T>
bool arrQueue<T>::deQueue(T * item)
{
if(front==rear)
{
cout<<"队列为空"<<endl;
return false;
}
*item=qu[front];
front=(front+1)%mSize;
return true;
}
template<class T>
bool arrQueue<T>::getFront(T * item)
{
if(front==rear)
{
cout<<"队列为空"<<endl;
return false;
}
*item=qu[front];
return true;
}
main.cpp
//main.cpp
#include <cstdlib>
#include <iostream>
#include "arrQueue.h"
using namespace std;
int main(int argc, char *argv[])
{
arrQueue<int> Qu(6);
for(int i=1;i<=4;i++)
{
Qu.enQueue(i);
}
cout<<"输出元素:";
Qu.print();
cout<<"入队操作:"<<endl;
Qu.enQueue(14);
cout<<"输出元素:";
Qu.print();
cout<<"出队操作:"<<endl;
int del;
Qu.deQueue(&del);
cout<<"出队元素为:"<<del<<endl;
cout<<"输出元素:";
Qu.print();
}