#include <stdio.h>
#define MAX_Q 100 /* Arbitrary size of the queue */
typedef int ITEM_TYPE;
typedef struct q_type {
ITEM_TYPE item[MAX_Q];
int front; /* Always points to the item prior to the front */
int rear; /* Always points to the rear */
} Q_TYPE;
void create_queue(Q_TYPE *queue) {
queue->front = 0;
queue->rear = 0;
}
void enqueue(Q_TYPE *queue, ITEM_TYPE new_item) {
/* Preconditions: queue not full */
if ((queue->rear + 1) % MAX_Q == queue->front) {
// Queue is full
printf("Queue is full, cannot enqueue.\n");
return;
}
queue->item[queue->rear] = new_item;
queue->rear = (queue->rear + 1) % MAX_Q;
}
// 如果需要一个简单的 main 函数来测试 enqueue
int main() {
Q_TYPE myQueue;
create_queue(&myQueue);
// 添加一些元素到队列中
enqueue(&myQueue, 1);
enqueue(&myQueue, 2);
enqueue(&myQueue, 3);
// 试图添加一个元素到一个满的队列中(将MAX_Q设置为更小的值以测试)
enqueue(&myQueue, 4);
return 0;
}
這段代碼首先包含了基本的標頭檔和您提供的類型定義。create_queue 函數初始化佇列的前後指標,而 enqueue 函數則是根據佇列未滿的前提條件,將新元素添加到佇列的後端。如果佇列已滿(即 rear 指標的下一個位置是 front 指標),則不執行添加操作並列印一條消息表示佇列已滿。佇列的 rear 指標在添加元素後會迴圈移動到下一個位置,如果到達陣列的盡頭則會回繞到陣列的開始。這就是環狀陣列的特性。
在 main 函數中,我創建了一個佇列實例,並使用 enqueue 函數添加了幾個元素,您可以通過更改 MAX_Q 的值並嘗試添加更多元素來測試佇列滿的情況。請注意,為了簡化示例,這裡沒有包括對佇列空的檢查以及 dequeue 函數的實現,這在實際應用中通常是必需的。