c语言编写一个循环缓冲
时间: 2023-08-25 18:15:33 浏览: 86
循环缓冲是一种常用的数据结构,可以用来实现先进先出的数据读写。以下是一个使用c语言编写的简单的循环缓冲:
```c
#include <stdio.h>
#include <stdlib.h>
#define BUF_SIZE 10
typedef struct {
int* buffer; /* 缓冲区指针 */
int head; /* 缓冲区头指针 */
int tail; /* 缓冲区尾指针 */
int size; /* 缓冲区大小 */
} cir_buf_t;
/* 初始化循环缓冲 */
void cir_buf_init(cir_buf_t* buf) {
buf->buffer = (int*)malloc(BUF_SIZE * sizeof(int));
buf->head = 0;
buf->tail = 0;
buf->size = BUF_SIZE;
}
/* 写入数据到循环缓冲 */
void cir_buf_write(cir_buf_t* buf, int data) {
buf->buffer[buf->tail] = data;
buf->tail = (buf->tail + 1) % buf->size;
if (buf->tail == buf->head) {
buf->head = (buf->head + 1) % buf->size;
}
}
/* 从循环缓冲读取数据 */
int cir_buf_read(cir_buf_t* buf) {
int data = buf->buffer[buf->head];
buf->head = (buf->head + 1) % buf->size;
return data;
}
/* 测试循环缓冲 */
int main() {
cir_buf_t buf;
cir_buf_init(&buf);
int i;
for (i = 0; i < 15; i++) {
cir_buf_write(&buf, i);
}
for (i = 0; i < 15; i++) {
printf("%d ", cir_buf_read(&buf));
}
return 0;
}
```
以上代码使用了一个结构体 `cir_buf_t` 来存储循环缓冲的状态,包括缓冲区指针、头指针、尾指针和缓冲区大小。在初始化循环缓冲时,我们通过 `malloc` 函数分配了一段内存作为缓冲区,并将头指针和尾指针都初始化为0。
写入数据时,我们首先将数据写入到当前尾指针指向的位置,然后将尾指针向前移动一位。如果此时尾指针和头指针相等,说明缓冲区已满,需要将头指针向前移动一位,以便给新数据腾出空间。
读取数据时,我们首先从头指针指向的位置读取数据,然后将头指针向前移动一位。如果此时头指针和尾指针相等,说明缓冲区已空,不能继续读取数据。
在主函数中,我们通过循环向循环缓冲中写入数据,并通过循环从循环缓冲中读取数据。最终输出结果为 `0 1 2 3 4 5 6 7 8 9 10 11 12 13 14`,表明循环缓冲中的数据按照先进先出的顺序被正确地读取出来。
阅读全文