1.2 - Queue
Introduction of Queue(佇列的基本介紹及應用)
1. 介紹
佇列(Queue)是一種特殊的抽象資料結構,可以用鏈結串列(Link List)或陣列(Array)來表示,佇列的特點是資料的進出是同一方向的,在前端(Front)取出資料,在尾端(Rear)輸入資料,具有先進先出(FIFO, First-In-First-Out))的特性。

2. 基本操作
Dequeue(): 從佇列的前端(Front)取出資料。
Enqueue(): 將資料放到佇列的尾端(Rear)。
IsEmpty(): 檢查是否佇列為空。
IsFull(): 檢查佇列是否已滿。(當使用Array製作佇列時需注意是否已滿。)
2.1 以Linear Link List來表示佇列的基本操作。
Dequeue(): 回傳Front指標(指向佇列的前端)的資料。
2. Enqueue(): 將資料放入佇列的尾端。
3. 輸出結果範例:
完整程式碼: https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_linklist.c
2.2 以Circular Link List來表示佇列的基本操作。
Circular Link List的特點是不需使用front指標,將rear指向front。
Dequeue(): 回傳Front指標(指向佇列的前端)的資料。
2. Enqueue(): 將資料放入佇列的尾端。
3. 輸出結果範例:
完整程式碼:https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_circular_linklist.c
2.3 以Linear Array來表示佇列的基本操作。和Link List不同的是,使用Array必須先宣告佇列的大小,所以佇列有可能會被填滿而無法再加入資料。
設定佇列的大小
2. Dequeue(): 回傳佇列端的資料,並將每筆資料向前推移。所以在此演算法中,front永遠指向第一個元素。
3. Enqueue(): 將資料放到佇列的後端。
4. 輸出結果範例:
完整程式碼:https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_array.c
2.4 以Circular Array來表示佇列的基本操作。
示意圖:

特點:
front和rear起始點在0
front所指的位置之資料不使用(不算在佇列中)
最多使用n-1個位置
宣告佇列參數
2. Dequeue(): 回傳佇列端的資料,並將front往下推移。
3. Enqueue(): 將資料放到佇列的後端。
4. 輸出結果範例:
完整程式碼:https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_circular_array1.c
2.5 加上tag改善2.3的空間效率
在這裡使用變數tag來記錄佇列是空或是滿的狀態。
示意圖:

宣告佇列參數
2. Dequeue(): 回傳佇列端的資料,並將front往下推移。
3. Enqueue(): 將資料放到佇列的後端。
4. 輸出結果範例:
完整程式碼:https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_circular_array2.c
Last updated