#include<iostream>
using namespace std;
#define MAXQSIZE 100
#define true 1
#define false 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef int QElemType;
typedef struct
{
QElemType *base;
int front; //头指针
int rear; //尾指针,若队列不为空时,rear指向队列尾元素的下一个位置
}SqQueue;
Status InitQueue( SqQueue &Q){
Q. base=( QElemType *)malloc(MAXQSIZE *sizeof(QElemType)); //申请空间,队头队尾指向空队列
if(!Q.base)exit (OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
Status EnQueue (SqQueue &Q,QElemType e){ //插入e为Q的新的队尾元素
if ((Q.rear+1)%MAXQSIZE==Q.front)return ERROR;
Q.base[Q.rear]=e;
Q.rear = (Q.rear+1)%MAXQSIZE;
return OK;
}
Status DeQueue (SqQueue &Q,QElemType &e){ //若队伍不空删除Q的队头元素,用e返回
if (Q.front==Q.rear)return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return e;
}
Status QueueEmpty(SqQueue Q){ //判断队列是否为空
if(Q.front==Q.rear)
return true;
else
return false ;
}
Status PrintfQueue(SqQueue Q){ //输出队列元素
while(Q.front<Q.rear)
{
cout<<Q.base[Q.front]<<" ";
Q.front+=1;
}
return OK;
}
int main ()
{
int i,e;
SqQueue Q1;
InitQueue(Q1);
for(i=0;i<10;i++)
EnQueue (Q1,i);
PrintfQueue(Q1);
cout<<endl;
cout<<"删除队首元素,";
DeQueue (Q1,e) ;
cout<<"删除的元素为"<<endl;
cout<<e<<endl;
cout<<"删除后的队列为"<<endl;
PrintfQueue(Q1);
cout<<endl;
cout<<"判断队列是否为空"<<endl;
cout<<QueueEmpty( Q1);
return 0;
}
数据结构—循环队列
最新推荐文章于 2022-03-26 18:03:29 发布