阿摩線上測驗 登入

申論題資訊

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

題組內容

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

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

請完成

申論題內容

⑴加入ㄧ資料項目至佇列的後端 (Add item to the rear of the queue.): void enqueue (Q_TYPE *queue, ITEM_TYPE new_item ) /* Preconditions: queue not full */ (10 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
#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 函數的實現,這在實際應用中通常是必需的。