用C語言實現一個迴圈隊列並不難。關鍵點在於對隊列 "空" 和 "滿" 狀態的判斷。
正如《C和指標》中所描寫的,有兩種方法來實現對隊列空和滿狀態的判斷。 在數組中空一個元素不填,起始時, 置tail為0, front為1, 這樣一來, 實現要浪費queue buffer中兩個元素空間: 隊列空: (tail+1) % queue_size == front 隊列滿: (tail+2) % queue_size == front 定義一個變數來記錄隊列中元素的個數, 判斷隊列的空和滿直接看變數的值即可
本文中使用的是第2種:
#include <stdio.h>#define QUEUE_SIZE 5#define QUEUE_TYPE intstatic int queue_cnt = 0;static int queue_front = 0;static int queue_tail = 0;static QUEUE_TYPE queue_buf[QUEUE_SIZE];int is_empty(){ return queue_cnt == 0;}int is_full(){ return queue_cnt == QUEUE_SIZE;}int insert(QUEUE_TYPE e){ if (is_full()) { printf("queue is full!!!\n"); return 0; } queue_buf[queue_tail] = e; queue_tail = (queue_tail + 1) % QUEUE_SIZE; queue_cnt++; return 1;}int delete(){ if (is_empty()) { printf("queue is empty!!!\n"); return 0; } queue_front = (queue_front + 1) % QUEUE_SIZE; queue_cnt--; return 1;}int main(){ insert(3); insert(3); insert(3); insert(3); insert(3); delete(); insert(3); insert(3); return 0;}