概述
环形队列(Circular Queue)是一种常见的数据结构,特别适用于在单片机等资源受限的环境下实现缓冲区或队列功能。下面是一个简单的环形队列的源码示例,用C语言实现:
#include <stdio.h>
#include <stdint.h>#define QUEUE_SIZE 10// 定义环形队列结构体
typedef struct {uint8_t buffer[QUEUE_SIZE]; // 数据缓冲区uint8_t head; // 队头指针uint8_t tail; // 队尾指针uint8_t count; // 队列中元素数量
} CircularQueue;// 初始化环形队列
void initQueue(CircularQueue *q) {q->head = 0;q->tail = 0;q->count = 0;
}// 向队列中添加元素
void enqueue(CircularQueue *q, uint8_t data)
{if (q->count < QUEUE_SIZE) {q->buffer[q->tail] = data;q->tail = (q->tail + 1) % QUEUE_SIZE;q->count++;} else {printf("Queue is full, cannot enqueue!\n");}
}// 从队列中取出元素
uint8_t dequeue(CircularQueue *q)
{if (q->count > 0) {uint8_t data = q->buffer[q->head];q->head = (q->head + 1) % QUEUE_SIZE;q->count--;return data;} else {printf("Queue is empty, cannot dequeue!\n");return 0; // 返回一个特殊值表示队列为空}
}// 获取队列中元素数量
uint8_t queueSize(CircularQueue *q)
{return q->count;
}int main(void)
{CircularQueue q;initQueue(&q);// 向队列中添加元素for (int i = 1; i <= QUEUE_SIZE; i++) {enqueue(&q, i);}// 从队列中取出并打印元素while (queueSize(&q) > 0) {uint8_t data = dequeue(&q);printf("%d ", data);}printf("\n");return 0;
}