用c语言实现循环队列
时间: 2023-11-28 13:05:41 浏览: 39
以下是用C语言实现循环队列的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 5
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void initQueue(Queue *q) {
q->front = 0;
q->rear = 0;
}
int isFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
int isEmpty(Queue *q) {
return q->front == q->rear;
}
void enQueue(Queue *q, int value) {
if (isFull(q)) {
printf("Queue is full.\n");
return;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
}
int deQueue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return value;
}
int main() {
Queue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
enQueue(&q, 4);
enQueue(&q, 5);
enQueue(&q, 6); // 队列已满,无法入队
printf("%d\n", deQueue(&q)); // 输出:1
printf("%d\n", deQueue(&q)); // 输出:2
printf("%d\n", deQueue(&q)); // 输出:3
printf("%d\n", deQueue(&q)); // 输出:4
printf("%d\n", deQueue(&q)); // 输出:5
printf("%d\n", deQueue(&q)); // 队列已空,无法出队,输出:-1
return 0;
}
```
以上代码中,我们使用了一个结构体`Queue`来表示循环队列,其中`data`数组用于存储队列元素,`front`和`rear`分别表示队头和队尾的下标。`initQueue`函数用于初始化队列,`isFull`和`isEmpty`函数分别用于判断队列是否已满和是否为空。`enQueue`函数用于入队,`deQueue`函数用于出队。在`enQueue`和`deQueue`函数中,我们使用了取模运算来实现循环队列的特性。