c语言环形队列的写法
时间: 2025-05-28 09:43:08 浏览: 19
### C语言环形队列实现代码示例
以下是基于C语言实现的一个简单的环形队列模块,该模块支持基本的入队和出队操作。此代码展示了如何通过数组模拟环形结构并管理指针位置。
#### 定义数据结构
首先定义一个用于表示环形队列的数据结构:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 10 // 队列的最大容量
typedef struct {
int data[MAX_SIZE]; // 存储队列元素的数组
int front; // 队首索引
int rear; // 队尾索引
} CircularQueue;
```
上述代码片段中定义了一个`CircularQueue`类型的结构体来存储队列中的元素以及两个重要的属性——`front`(指向队头的位置)和`rear`(指向队尾的位置)。这些变量初始化时均设为 `-1` 表明当前队列为空[^1]。
#### 初始化函数
创建一个新的环形队列实例,并将其状态设置为初始状态:
```c
void initialize(CircularQueue* queue) {
queue->front = -1;
queue->rear = -1;
}
```
当调用 `initialize()` 函数后,会将新分配出来的内存空间清零以便于后续使用 memset 方法填充特定大小区域内的字节值至指定数值上[^2]。
#### 入队 (Enqueue) 操作
向队列添加新的整数项之前需确认是否有足够的剩余空间可用;如果存在,则更新相应字段完成插入过程。
```c
int enqueue(CircularQueue* queue, int value) {
if ((queue->rear + 1) % MAX_SIZE == queue->front) {
printf("Error: Queue is full.\n");
return 0; // 返回失败标志
}
if (queue->front == -1 && queue->rear == -1){
queue->front = 0;
}
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->data[queue->rear] = value;
return 1; // 成功返回 true
}
```
这里实现了循环缓冲区的关键逻辑之一:“满”的判断条件是 `(rear+1)%size==front`, 而不是单纯比较两者是否相等.
#### 出队 (Dequeue) 操作
从队列移除最前面的一项前先验证它不处于空闲状况下再执行实际删除动作.
```c
int dequeue(CircularQueue* queue) {
if (queue->front == -1 || queue->front > queue->rear ) {
printf("Error: Queue is empty.\n");
return -1; // 如果尝试从未初始化或者已经排空的对象里取东西则报错.
}
int item = queue->data[queue->front];
if(queue->front == queue->rear){
/* 当只有一个项目存在于列表之中并且即将被弹出去之后重置整个容器 */
queue->front=-1 ;
queue->rear= -1 ;
}else{
queue->front=(queue->front+1)%MAX_SIZE;// 正常情况下的移动到下一个节点处继续等待处理其他请求到来即可满足需求了哦~😊
}
return item;
}
```
以上即完成了基础版本关于C语言环境下针对固定长度型别的圆形先进先出序列(FIFO)的设计思路说明[^1]^[]^。
阅读全文
相关推荐







