#include <stdio.h>
#include <stdlib.h>
#define Error 1
#define Ok 0
#define MAXSIZE 6
typedef int Status;
typedef int QElemType;
typedef struct SqQueue{
QElemType *base;
int front ;
int rear;
}SqQueue; //循环队列的定义
Status Ini_SqQueue(SqQueue &s) //初始化循环队列
{
s.base=(QElemType*)malloc(MAXSIZE*sizeof(QElemType));
if(!s.base) return Error;
s.front=s.rear=0;
return Ok;
}
int QueueLength(SqQueue &s) //求得当前队列的长度
{
return (s.rear-s.front+MAXSIZE)%MAXSIZE;
}
Status EnQueue(SqQueue &s,QElemType e) //插入队列中元素e
{
if((s.rear+1)%MAXSIZE==s.front) return Error;
s.base[s.rear]=e;
s.rear=(s.rear+1)%MAXSIZE;
return Ok;
}
Status DeQueue(SqQueue &q,QElemType &e){ //删除队列中的元素
if(q.front==q.rear) return Error;
e=q.base[q.front];
q.front=(q.front+1)%MAXSIZE;
return Ok;
}
void print(SqQueue s)
{
int i;
for(i=s.front;i<s.rear-s.front;i++)
printf("%d",s.base[i]);
}
void main()
{
SqQueue s;int e,i,j;
Ini_SqQueue(s);
printf("请输入(按0结束)");
scanf("%d",&e);
while(e!=0)
{
EnQueue(s,e);
scanf("%d",&e);
}
printf("您的循环队列为:");
print(s);
printf("是否需要删除(1或0)");
scanf("%d",&i);
while(i==1)
{
DeQueue(s,j);
print(s);
printf("被删除的值为%d",j);
printf("是否需要删除(1或0)");
scanf("%d",&i);
}
printf("按任意键退出");
getchar();
getchar();
}
当求rear和front的下一个位置的时候要这样:(rear+1)%maxQsize 就是要取余队列的长度
当队列里面满的时候无法再插入新值