用c实现高效循环缓冲队列
时间: 2023-07-24 11:42:24 浏览: 45
循环缓冲队列常用于数据缓存、数据传输等场景中,本身就具有一定的高效性,但是在实现上还是需要一些技巧的。下面是一个用C语言实现高效循环缓冲队列的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *data;
int size;
int head;
int tail;
} Queue;
Queue *create_queue(int size) {
Queue *queue = (Queue *) malloc(sizeof(Queue));
queue->data = (int *) malloc(size * sizeof(int));
queue->size = size;
queue->head = 0;
queue->tail = 0;
return queue;
}
void destroy_queue(Queue *queue) {
if (queue) {
if (queue->data) {
free(queue->data);
}
free(queue);
}
}
int is_empty(Queue *queue) {
return queue->head == queue->tail;
}
int is_full(Queue *queue) {
return (queue->tail + 1) % queue->size == queue->head;
}
void enqueue(Queue *queue, int value) {
if (!is_full(queue)) {
queue->data[queue->tail] = value;
queue->tail = (queue->tail + 1) % queue->size;
}
}
int dequeue(Queue *queue) {
if (!is_empty(queue)) {
int value = queue->data[queue->head];
queue->head = (queue->head + 1) % queue->size;
return value;
}
return -1;
}
int main() {
Queue *queue = create_queue(5);
for (int i = 0; i < 6; i++) {
printf("enqueue %d\n", i);
enqueue(queue, i);
}
while (!is_empty(queue)) {
printf("dequeue %d\n", dequeue(queue));
}
destroy_queue(queue);
return 0;
}
```
在上面的代码中,我们使用了一个结构体来表示循环缓冲队列,包含了队列的大小、头指针和尾指针等信息。在实现入队和出队操作时,我们都要考虑队列为空或队列已满的情况,通过头指针和尾指针的移动来实现循环队列的功能。这样就可以实现一个高效的循环缓冲队列了。