概述
????????環形隊列(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;
}