阿摩線上測驗 登入

申論題資訊

試卷:106年 - 106 一般警察特種考試_二等_刑事警察人員犯罪分析組:計算機概論(包括計算機結構、資料結構、程式設計)#62390
科目:計算機概論
年份:106年
排序:0

題組內容

一、請使用 C 語言利用環狀陣列(Circular Array)實做ㄧ佇列(Queue)。給予如下定義:

假設ㄧ開始建立ㄧ佇列的程式如下:

請完成

申論題內容

⑵從佇列前端移除ㄧ資料項目 (Remove item from the front of the queue.): void dequeue (Q_TYPE *queue, ITEM_TYPE *old_item ) /* Preconditions: queue not empty */(10 分) 

詳解 (共 1 筆)

詳解 提供者:hchungw
以下是一個 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 調用來測試這個佇列的實現是否按照預期工作。