环形缓冲区的C语言实现方式
时间: 2023-11-15 13:05:17 浏览: 52
环形缓冲区是一种常见的数据结构,它可以在固定大小的缓冲区中循环存储数据。以下是一个简单的环形缓冲区的C语言实现方式:
```c
#define BUFFER_SIZE 10
typedef struct {
int buffer[BUFFER_SIZE];
int head;
int tail;
} CircularBuffer;
void init_buffer(CircularBuffer *buf) {
buf->head = 0;
buf->tail = 0;
}
int is_buffer_empty(CircularBuffer *buf) {
return buf->head == buf->tail;
}
int is_buffer_full(CircularBuffer *buf) {
return (buf->tail + 1) % BUFFER_SIZE == buf->head;
}
void add_to_buffer(CircularBuffer *buf, int data) {
if (is_buffer_full(buf)) {
// 缓冲区已满
return;
}
buf->buffer[buf->tail] = data;
buf->tail = (buf->tail + 1) % BUFFER_SIZE;
}
int remove_from_buffer(CircularBuffer *buf) {
if (is_buffer_empty(buf)) {
// 缓冲区为空
return -1;
}
int data = buf->buffer[buf->head];
buf->head = (buf->head + 1) % BUFFER_SIZE;
return data;
}
```
上述代码定义了一个`CircularBuffer`结构体,其中`buffer`数组用于存储数据,`head`和`tail`分别表示缓冲区的头和尾。`init_buffer`函数用于初始化缓冲区,`is_buffer_empty`和`is_buffer_full`函数分别用于判断缓冲区是否为空和已满。`add_to_buffer`函数用于向缓冲区中添加数据,`remove_from_buffer`函数用于从缓冲区中移除数据。在添加和删除数据时,需要考虑头和尾的位置,使用取模运算可以实现循环存储。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)