提供一个简单C语言的环形队列,buffer为固定数组,一个read函数读取buffer的内容,write函数写入buffer,buffer长度为100
时间: 2024-11-23 22:40:42 浏览: 48
在C语言中,我们可以创建一个简单的环形队列(Circular Queue)结构来存储数据,它利用数组作为底层存储,通过两个指针(front 和 rear)来跟踪队首和队尾的位置。当队列满(rear等于front+1对数组大小取模)或者空(front等于rear)时,我们就需要特别处理。下面是一个基本的实现:
```c
#include <stdio.h>
#define BUFFER_SIZE 100
typedef struct {
int *data; // 存储数据的数组
int front; // 队首索引
int rear; // 队尾索引
} Queue;
// 初始化环形队列
void init(Queue* queue) {
queue->data = (int*)malloc(BUFFER_SIZE * sizeof(int));
if (!queue->data)
printf("Memory allocation failed.\n");
queue->front = -1;
queue->rear = -1;
}
// 入队(写入)
void enqueue(Queue* queue, int value) {
if (queue->rear == (queue->front + BUFFER_SIZE - 1) % BUFFER_SIZE) { // 队列已满
printf("Queue is full.\n");
return;
}
queue->rear = (queue->rear + 1) % BUFFER_SIZE; // 更新队尾
queue->data[queue->rear] = value;
}
// 出队(读取)
int dequeue(Queue* queue) {
if (queue->front == queue->rear) { // 队列为空
printf("Queue is empty.\n");
return -1; // 返回错误标志
}
int value = queue->data[queue->front]; // 获取并移除队首元素
queue->front = (queue->front + 1) % BUFFER_SIZE; // 更新队首
return value;
}
// 读取队列内容
int read(Queue* queue) {
if (queue->front == -1 || queue->front > queue->rear) {
printf("Queue is empty or not initialized.\n");
return -1; // 返回错误标志
}
return queue->data[queue->front];
}
// 示例用法
int main() {
Queue q;
init(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printf("First element in the queue: %d\n", read(&q)); // 输出 1
dequeue(&q); // 从队列中弹出一个值
dequeue(&q); // 再次尝试读取
free(q.data); // 清理内存
return 0;
}
```
阅读全文
相关推荐


















