不使用动态分配内存,用C语言写一套环形缓冲区队列初始化、入队、出队、队满队空的函数
时间: 2024-09-25 12:05:59 浏览: 51
在C语言中,我们可以使用数组来创建一个固定的环形缓冲区作为队列。这种队列不需要动态分配内存,因为数组大小在编译时就已经确定。下面是一个简单的环形缓冲区队列的实现:
```c
#include <stdio.h>
#define BUFFER_SIZE 10 // 缓冲区大小
typedef struct {
int data[BUFFER_SIZE]; // 存储数据的数组
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
// 判断队列是否为空
int isQueueEmpty(const Queue *queue) {
return queue->front == -1 && queue->rear == -1;
}
// 判断队列是否已满
int isQueueFull(const Queue *queue) {
return (queue->front + 1) % BUFFER_SIZE == queue->rear;
}
// 入队操作
void enqueue(Queue *queue, int value) {
if (isQueueFull(queue)) {
printf("Error: Queue is full.\n");
return;
}
if (queue->front == -1) {
queue->front = 0;
} else {
queue->rear = (queue->rear + 1) % BUFFER_SIZE;
}
queue->data[queue->rear] = value;
}
// 出队操作
int dequeue(Queue *queue) {
if (isQueueEmpty(queue)) {
printf("Error: Queue is empty.\n");
return -1;
}
int value = queue->data[queue->front];
if (queue->front == queue->rear) {
queue->front = queue->rear = -1;
} else {
queue->front = (queue->front + 1) % BUFFER_SIZE;
}
return value;
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
printf("Dequeued element: %d\n", dequeue(&q));
return 0;
}
```
在这个实现中,`initQueue()`用于初始化队列,`isQueueEmpty()`和`isQueueFull()`用于检查队列状态,`enqueue()`负责入队,`dequeue()`负责出队。注意,当队列满或空时,函数会给出错误提示。
阅读全文