ringbuffer C语言实现
时间: 2024-02-03 14:02:50 浏览: 78
以下是一个简单的环形缓冲区的 C 语言实现示例:
```c
#define BUFFER_SIZE 16
typedef struct {
int head;
int tail;
int size;
char buffer[BUFFER_SIZE];
} RingBuffer;
void push(RingBuffer *rb, char c) {
rb->buffer[rb->tail] = c;
rb->tail = (rb->tail + 1) % BUFFER_SIZE;
if (rb->size == BUFFER_SIZE) {
rb->head = (rb->head + 1) % BUFFER_SIZE;
} else {
rb->size++;
}
}
char front(RingBuffer *rb) {
return rb->buffer[rb->head];
}
void pop(RingBuffer *rb) {
rb->head = (rb->head + 1) % BUFFER_SIZE;
rb->size--;
}
int empty(RingBuffer *rb) {
return rb->size == 0;
}
int size(RingBuffer *rb) {
return rb->size;
}
```
这个示例中,我们使用了一个结构体来表示环形缓冲区,其中 `head` 表示第一个元素的下标,`tail` 表示下一个元素的下标,`size` 表示缓冲区中当前元素的数量,`buffer` 是实际存储元素的数组。
`push` 函数将一个字符添加到缓冲区的末尾,`front` 函数返回缓冲区的第一个元素,`pop` 函数将缓冲区的第一个元素删除,`empty` 函数返回缓冲区是否为空,`size` 函数返回缓冲区中元素的数量。
注意,在这个示例中,我们使用了取模运算来实现环形缓冲区的循环。这里的 `BUFFER_SIZE` 可以根据实际需要进行调整。
阅读全文