队列——循环队列
数组描述中,每次出队后,将其余元素往前移动一个位置,让a[0]始终是队的第一个元素
#include <iostream>
using namespace std;
class queue
{
public:
queue():maxSize(5),size(0) //构造函数初始化队列里元素的个数为0,并初始化队列可以装5个元素
{
a=new int[maxSize];
}
~queue(); //析构函数删除队列
int dequeue(); //出队
void enqueue(int n); //进对
private:
int size; //队列里元素的个数
int maxSize; //队列能装下的最大元素个数
int *a;
};
queue::~queue()
{
delete[] a; //析构,释放内存
}
void queue::enqueue(int n) //入队操作,增加一个元素放在队尾
{
if(size==maxSize) //如果数组装不下了,就增加10个位置
{
maxSize+=10;
int *p=new int[maxSize];
for(int i=0;i<=size;i++)
p[i]=a[i];
delete[] a;
a=p;
}
a[size++]=n;
}
int queue::dequeue() //出对操作,返回出队列第一个元素,即数组的a[0]
{
int out; //返回值
if(size) //用size判断是否栈里还有元素
{
out=a[0];
for(int i=0;i<size-1;i++)
a[i]=a[i+1];
size--;
return out;
}
else
{
cout<<"队列已经为空!"<<endl;
exit(0);
}
}
int main()
{
queue que;
cout<<"The enqueue of que are: ";
for(int i=1;i<=20;i++)
{
cout<<i<<" ";
que.enqueue(i);
}
cout<<endl;
cout<<"The dequeue of que are: ";
for(i=1;i<=15;i++)
cout<<que.dequeue()<<" ";
cout<<endl;
return 0;
}