以下是一個 dequeue 函數的實現,它將從佇列的前端移除一個資料項目。請注意,這個函數包含了一個指向 ITEM_TYPE 的指標參數,這樣就可以將被移除的元素返回給調用者。這個函數同樣假設佇列不為空。
c
Copy code
void dequeue(Q_TYPE *queue, ITEM_TYPE *old_item) {
/* Preconditions: queue not empty */
if (queue->front == queue->rear) {
// Queue is empty
printf("Queue is empty, cannot dequeue.\n");
return;
}
*old_item = queue->item[queue->front];
queue->front = (queue->front + 1) % MAX_Q;
}
// 示例 main 函數,展示如何使用 dequeue 函數
int main() {
Q_TYPE myQueue;
ITEM_TYPE removedItem;
create_queue(&myQueue);
// 先添加一些元素到佇列中
enqueue(&myQueue, 1);
enqueue(&myQueue, 2);
enqueue(&myQueue, 3);
// 然後移除一個元素
dequeue(&myQueue, &removedItem);
printf("Removed: %d\n", removedItem);
return 0;
}
這段代碼中的 dequeue 函數首先檢查佇列是否為空(即 front 和 rear 指針是否相等)。如果佇列為空,它將列印一條消息並返回。如果佇列不為空,函數將移除位於 front 指標位置的元素,並將 front 指標移動到下一個位置。正如之前 enqueue 函數中所處理的那樣,front 指標在達到陣列盡頭時也會回繞到陣列開始。
在提供的 main 函數示例中,創建了一個佇列並添加了幾個元素,然後調用 dequeue 函數移除了一個元素,並列印了被移除的元素的值。您可以通過添加更多的 enqueue 和 dequeue 調用來測試這個佇列的實現是否按照預期工作。