写一个环型缓冲区的c代码
时间: 2024-09-11 08:15:26 浏览: 36
环形缓冲区(Circular Buffer)是一个固定大小的数组,用于存储一系列的数据,并通过索引来访问元素,当添加新数据时,会替换掉旧数据的最后一个位置,形成循环的效果。下面是一个简单的C语言环形缓冲区实现的例子:
```c
#include <stdio.h>
#define BUFFER_SIZE 10 // 缓冲区大小
typedef struct {
int data[BUFFER_SIZE]; // 数据数组
int head; // 首部指针
int tail; // 尾部指针
} RingBuffer;
// 初始化环形缓冲区
void init(RingBuffer *buffer) {
buffer->head = 0;
buffer->tail = 0;
}
// 添加数据到环形缓冲区
void addData(RingBuffer *buffer, int value) {
if (buffer->tail == (buffer->head + BUFFER_SIZE - 1)) { // 满了,从头开始写
buffer->tail = 0;
} else {
buffer->tail = (buffer->tail + 1) % BUFFER_SIZE; // 循环更新尾部指针
}
buffer->data[buffer->tail] = value;
}
// 从环形缓冲区获取数据
int getData(RingBuffer *buffer) {
if (buffer->head == buffer->tail) { // 空了,返回-1表示无效数据
return -1;
} else {
int ret = buffer->data[buffer->head];
buffer->head = (buffer->head + 1) % BUFFER_SIZE; // 更新头部指针
return ret;
}
}
// 示例用法
int main() {
RingBuffer buffer;
init(&buffer);
for (int i = 0; i < BUFFER_SIZE * 2; i++) {
addData(&buffer, i);
printf("Get: %d\n", getData(&buffer));
}
return 0;
}
```
这个例子展示了如何创建、初始化以及插入和取出数据。当你运行这个程序,它会生成环形缓冲区的循环效果。
阅读全文