阿摩線上測驗 登入

申論題資訊

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

題組內容

三、用 C 語言:

申論題內容

⑵由上述之佇列 ADT 結構體宣告,設計二個副程式(function),第一個為判斷佇 列是否已空,第二個為刪除佇列前端元素。(10 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
基於上述佇列ADT結構體的聲明,我們可以設計兩個函數:一個用於判斷佇列是否為空,另一個用於刪除佇列前端的元素。這裡,我們將假設front的初始值為0,rear的初始值也為0,並且當front == rear時,佇列被認為是空的。這種實現方式簡單明瞭,適合教學和基本使用。
判斷佇列是否為空的函數

#include <stdbool.h> // 引入stdbool.h以使用bool類型
// 判斷佇列是否為空
bool isQueueEmpty(Queue q) {
    return q.front == q.rear; // 如果front和rear相等,則佇列為空
}
這個函數返回true如果佇列為空,否則返回false。這種判斷方式適用於front和rear初始化為相同值(例如0)的情況,並且在每次添加或刪除元素時適當更新這些值。
刪除佇列前端元素的函數
在進行刪除操作時,我們需要注意只有當佇列不為空時才可以刪除元素。刪除操作通常包括移除佇列前端的元素,並更新front變數。

#include <stdio.h>
// 刪除佇列前端的元素
void dequeue(Queue *q) {
    if (isQueueEmpty(*q)) { // 先判斷佇列是否為空
        printf("佇列為空,無法刪除元素。\n");
    } else {
        q->front = (q->front + 1) % MaxQueueSize; // 移動front指標
    }
}
這裡使用了取模運算子%來確保front指標在達到陣列的末尾時能夠正確迴圈回陣列的開始位置,這是一種常見的處理迴圈佇列的方法。然而,這種方法假設你在佇列實現中使用了迴圈佇列的策略。如果你沒有使用迴圈佇列(即佇列一旦滿了就不能再添加元素,即使中間有空位),則不需要% MaxQueueSize這部分。
注意,這裡的dequeue函數沒有返回被刪除的元素。在實際應用中,你可能希望函數能夠返回被刪除的元素值,特別是在佇列中存儲的不僅僅是整數,而是更複雜資料結構時。這可以通過修改函數的簽名和實現來實現,例如通過讓函數返回被刪除的元素,或者通過傳入一個指標參數來存儲被刪除的元素。