总c语言着一个循环队列
时间: 2023-09-03 10:06:56 浏览: 86
循环队列是一种数据结构,它可以在固定大小的数组上实现队列操作。下面是一个使用 C 语言实现的循环队列:
```C
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 5 // 队列的最大容量
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
int data[MAX_SIZE]; // 存储数据的数组
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队
void enqueue(Queue *q, int x) {
if (isFull(q)) {
printf("Queue is full!\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
}
// 出队
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty!\n");
return -1;
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return x;
}
// 打印队列中的元素
void printQueue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty!\n");
return;
}
printf("Queue: ");
int i = q->front;
while (i != q->rear) {
printf("%d ", q->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("\n");
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printQueue(&q);
dequeue(&q);
printQueue(&q);
enqueue(&q, 4);
enqueue(&q, 5);
printQueue(&q);
enqueue(&q, 6); // 队列已满,无法再入队
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q); // 队列已空,无法再出队
printQueue(&q);
return 0;
}
```
在上面的代码中,我们使用了一个结构体 `Queue` 来表示循环队列,其中 `front` 是队头指针,`rear` 是队尾指针,`data` 是一个数组,用于存储队列中的元素。函数 `initQueue()` 用于初始化队列,函数 `isEmpty()` 和 `isFull()` 用于判断队列是否为空或已满,函数 `enqueue()` 和 `dequeue()` 分别用于入队和出队,函数 `printQueue()` 用于打印队列中的元素。
阅读全文