使用C语言创建一个环形队列
时间: 2024-10-25 07:00:37 浏览: 26
在C语言中创建一个环形队列,通常需要两个数组:一个用于存储队列元素,另一个用于指向当前元素的位置。环形队列的关键在于当队列满或者为空的时候,索引会“环绕”到队列的开始或结束。
以下是基本步骤:
1. 定义两个指针:`front` 和 `rear` 分别表示队头和队尾的索引。初始时,它们都指向数组的第一个元素,即队列为空。
2. 队列的最大容量由数组长度决定,例如数组大小为`size`。
3. 插入操作(`enqueue`):如果队尾未达到最大容量,将新元素添加到数组`data[rear]`,然后`rear`加一;若已满,则移动所有元素一位,腾出空间并插入新元素。
4. 删除操作(`dequeue`):如果队头不是第一个元素,取出并返回`data[front]`,然后`front`加一;若队头为第一个元素,意味着队列为空。
下面是一个简单的环形队列结构体和函数示例:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
Queue* create_queue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
if (!queue) {
printf("Memory allocation failed.\n");
return NULL;
}
queue->front = queue->rear = -1; // 初始化为空
return queue;
}
void enqueue(Queue* queue, int value) {
if ((queue->rear + 1) % MAX_SIZE == queue->front) { // 队满
printf("Queue is full.\n");
} else {
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->data[queue->rear] = value;
printf("Enqueued element: %d\n", value);
}
}
int dequeue(Queue* queue) {
if (queue->front == -1) { // 队空
printf("Queue is empty.\n");
return -1; // 返回特殊值表示队列为空
} else {
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
printf("Dequeued element: %d\n", value);
return value;
}
}
void destroy_queue(Queue* queue) {
free(queue);
}
```
阅读全文