C语言操作顺序存储的队列,关键点是判断队列是否为空、队列是否为满。判断队列是否为空:对头==队尾即Q.front==Q.rear
,判断队列是否满:Q.front==(Q.rear+1)%Maxsize
;
完整代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int front,rear;
}SqQueue;
//初始化一个队列。队列:只允许在一端进行插入、在另外一段进行删除操作的线性表
SqQueue InitSqQueue(SqQueue Q){
Q.rear = Q.front = 0;
printf("初始化队列成功!\n");
return Q;
}
//往队列中进行插入数据的操作
SqQueue InsertQueue(SqQueue Q){
int x;
printf("请输入需要入队的元素:\n");
scanf("%d",&x);
if((Q.rear+1)%MaxSize==Q.front){//此处为判断队满的条件
printf("队列已满\n");
}
while(x!=999){
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
printf("请输入需要入队的元素:\n");
scanf("%d",&x);
}
return Q;
}
//进行队列出队的操作,这里只进行一次出队操作
SqQueue OutQueue(SqQueue Q){
int x;
if(Q.front==Q.rear){//判断队空
printf("队列为空,出队失败!\n");
}
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
printf("出队的元素为:%d",x);
printf("\n");
return Q;
}
//打印队列中的数据
void Print(SqQueue Q){
while(Q.front!=Q.rear){
printf("%d ",Q.data[Q.front]);
Q.front++;
}
}
int main()
{
SqQueue Q;
SqQueue q = InsertQueue(InitSqQueue(Q));
printf("进行入队操作后队列中的元素为:\n");
Print(q);
printf("\n");
q = OutQueue(q);
printf("进行一次出队操作后队列中的元素为:\n");
Print(q);
return 0;
}
运行结果: