首页 > 代码库 > 队列(顺序)

队列(顺序)

顺序队列是一段连续的地址,但是存在假溢出情况,所以要用循环队列来实现,具体操作像钟表

下面是顺序队列的表示与实现:

#include <iostream>using namespace std;//顺序循环队列的基本表示和实现const int MAX_SIZE = 100;//定义队列长度struct SqQueue{    int * base;    int front ;    int rear;};//初始化队列 注意队尾队首指针的初始化bool InitQueue(SqQueue &sq){    sq.base=(int*)malloc(sizeof(int));    if (!sq.base)    {        return false;    }    sq.front=sq.rear=0;    cout<<"Initial Queue Successfully!"<<endl;    return true;}//返回队列的长度int QueueLength(SqQueue &sq){    return (sq.rear-sq.front+MAX_SIZE)%(MAX_SIZE);}//插入元素e为 队列的队尾元素bool EnQueue(SqQueue &sq,int e){    if ((sq.rear+1)%(MAX_SIZE)==sq.front)//循环队列 判断队列是否满了    {        cout<<"sorry ,overflow"<<endl;        return false;    }    sq.base[sq.rear]=e;    sq.rear=(sq.rear+1)%MAX_SIZE;//如果钟表走到12点 下一个将走到1点    return true;}//删除队首元素 用e返回bool DeQueue(SqQueue &sq,int &e){    if (sq.front==sq.rear)//判断队列是否为空    {        cout<<"Sorry,the queue is empty"<<endl;        return false;    }    e=sq.base[sq.front];    sq.front=(sq.front+1)%MAX_SIZE;    return true;}//打印队列void PrintQueue(const SqQueue sq){    if (sq.rear==sq.front)    {        cout<<"Sorry,the queue is empty"<<endl;        return;    }    cout<<"Now print the new queue:"<<endl;    int index=0;    index=sq.front;    while (index!=sq.rear)    {        cout<<sq.base[index]<<endl;        index=(index+1)%MAX_SIZE;    }}void main(){    SqQueue sq={0};    InitQueue(sq);    int ElemNum=0;    cout<<"请输入要插入元素的个数:";    cin>>ElemNum;    int Elem=0;    for (int i=0;i<ElemNum;i++)    {        cout<<"请输入要插入第 "<<i+1<<" 个元素:";        cin>>Elem;        if (EnQueue(sq,Elem))        {            cout<<"插入成功"<<endl;;        }    }    PrintQueue(sq);//打印队列    int delnum;    DeQueue(sq,delnum);//删除第一个元素    cout<<"the delete num is :"<<delnum<<endl;    PrintQueue(sq);//打印队列    DeQueue(sq,delnum);    DeQueue(sq,delnum);    PrintQueue(sq);//打印队列}

结果如下图所示: