概述
环形队列(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;
}