顺序循环队列的实现(c语言)

队列的顺序存储结构——循环队列

队空的条件: 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;
}
运行结果如图:

顺序循环队列的实现(c语言)