队列的顺序存储结构——循环队列
队空的条件: front=rear
队满的条件是: (rear+1)%QueueSize=front
代码实现如下:
#include<stdio.h>
#define MAXSIZE 100 //假定预设分配的队列空间最多能存放100个表目
typedef char datatype;//假定队列 的 表目为 字符类型
typedef struct
{
datatype Q[MAXSIZE];
int front,rear;//对头和队尾
} SeqQuene;
SeqQuene QU;
datatype x;
void EnQueue(SeqQuene *sq,datatype x);//队列的插入
datatype DeQueue(SeqQuene *sq);//队列的删除
datatype getFront(SeqQuene *s);//获取队头元素
void clearQueue(SeqQuene *sq);//置空对列
int QueueEmpty(SeqQuene *sq);//判断队是否为空!
int main()
{
clearQueue(&QU);
printf("please input your data:");
scanf("%c",&x);
EnQueue(&QU,x);
if(QueueEmpty(&QU))
{
printf("empty!\n");
}
else
{
printf("not empty!\n");
}
x=getFront(&QU);
printf("the moment x is %c\n",x);
x=DeQueue(&QU);
if(QueueEmpty(&QU))
{
printf("empty!\n");
}
else
{
printf("not empty!\n");
}
printf("the moment x is %c\n",x);
return 0;
}
void EnQueue(SeqQuene *sq,datatype x)
{
if(sq->front==(sq->rear+1)%MAXSIZE)
{
printf("overflow!");
}
else
{
sq->Q[sq->rear]=x;
sq->rear=(sq->rear+1)%MAXSIZE;
}
}
datatype DeQueue(SeqQuene *sq)
{
if(sq->front==sq->rear)
{
printf("underFlow");
}
else
{
sq->front=(sq->front+1)%MAXSIZE;
return sq->Q[sq->front-1];
}
}
datatype getFront(SeqQuene *sq)
{
if(sq->front==sq->rear)
{
printf("underFlow!");
}
else
{
return sq->Q[sq->front];
}
}
void clearQueue(SeqQuene *sq)
{
sq->front=sq->rear=0;
}
int QueueEmpty(SeqQuene *sq)
{
printf("the moment front is:%d,the moment rear is:%d\n",sq->front,sq->rear);
if(sq->front==sq->rear)
return 1;
else return 0;
}
运行结果如图: