循环队列空出来一格
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 20
//定义队列的管理
typedef struct queue
{
int data[MAX]; //数据域
int front; //队列的队首
int rear; //队列的队尾
} sq, *psq;
//队列初始化
psq queue_init()
{
//申请队列
psq queue = malloc(sizeof(sq));
if (queue == NULL)
{
printf("queue error\n");
return NULL;
}
//队列初始化
queue->front = 0; //队首
queue->rear = 0; //队尾
return queue;
}
//入队
int queue_rear(psq queue, int num)
{
//判断是满队列
if ((queue->rear + 1) % MAX == queue->front)
{
printf("队列已满\n");
return -1;
}
else
{
//从队尾加入队列
queue->data[queue->rear] = num;
//重置队尾
queue->rear = (queue->rear + 1) % MAX;
}
return 0;
}
//出队
int queue_front(psq queue, int *num)
{
//判断是空队列
if (queue->front == queue->rear)
{
printf("队列为空\n");
return -1;
}
else
{
//从队头删除队列
*num = queue->data[queue->front];
//重置队头
queue->front = (queue->front + 1) % MAX;
}
}
//具体实现
int main()
{
//申请队列对象
psq myqueue = queue_init(10);
//入队
for (int i = 0; i < 19; i++)
{
queue_rear(myqueue, i + 1);
printf("入队的数据%d\n", i + 1);
}
//出队
printf("出队:");
int num;
while (myqueue->front != myqueue->rear)
{
queue_front(myqueue, &num);
printf("-%d", num);
}
printf("\n");
return 0;
}