特点:先进先出
描述:队列及数据形成一个圆环,队头数据出去,队尾数据进来,当队列为空时,队尾和对头指向同一处,当队满时,队尾和对头还是指向同一处。
例:队列类模版
//dl1.h
#define QUEUE_CLASS
#include<iostream.h>
#include<stdlib.h>
const int MaxQSize=50; //队列最大为50
template<class T>
class Queue
{
int front,rear,count;
T qlist[MaxQSize];
public:
Queue(void); //构造函数
void QInsert(const T& item);//入队
T QDelete(void); //出队
void ClearQueue(void);//清空队列
T QFront(void)const;//队列头
int QLength(void)const;//返回队列长度
int QEmpty(void)const;//返回队列是否为空
int QFull(void)const;//返回队列是否为满
};
//构造函数,初始化对头指针,队尾指针、元素个数
template<class T>
Queue<T>::Queue(void):front(0),rear(0),count(0)
{}
//向队尾插入元素(入队)
template<class T>
void Queue<T>::QInsert(const T& item)
{
if(count==MaxQSize)
{//如果队满,终止程序
cerr<<"Queue overflow!"<<endl;
exit(1);
}
count++;//元素个数+1
qlist[rear]=item;//向队尾插入元素
rear=(rear+1)%MaxQSize//队尾指针+1,用取余运算实现循环队列
}
//删除队首元素,并返回该元素的值(出队)
template<class T>
T Queue<T>::QDelete(void)
{
T temp;
if(count=0)
{//如果队空,终止程序
cerr<<"This is an empty queue!"<<endl;
exit(1);
}
temp=qlist[front];//记录队首元素值
count--; //元素个数-1
front=(front+1)%MaxQSize;//队首指针+1,用取余运算实现循环队列
return temp;//返回首元素值
}
//清空队列
template<class T> //难道说直接覆盖了吗?
void Queue<T>::ClearQueue(void)
{
count=0;
front=0;
rear=0;
}
//访问队列首元素
template<class T>
T Queue<T>::QFront(void)const
{
return qlist[front];
}
//返回队列元素个数
template<class T>
int Queue<T>::QLength(void)const
{
return count;
}
//是否空队
template<class T>
int Queue<T>::QEmpty(void)const
{
return count==0;
}
//是否队满
template<class T>
int Queue<T>::QFull(void)const
{
return count==MaxQSize;
}