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製作佇列時需注意是否已滿。)

  1. Dequeue(): 回傳Front指標(指向佇列的前端)的資料。

2. Enqueue(): 將資料放入佇列的尾端。

3. 輸出結果範例:

完整程式碼: https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_linklist.c

Circular Link List的特點是不需使用front指標,將rear指向front。

  1. Dequeue(): 回傳Front指標(指向佇列的前端)的資料。

2. Enqueue(): 將資料放入佇列的尾端。

3. 輸出結果範例:

完整程式碼:https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_circular_linklist.c

  1. 設定佇列的大小

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個位置

  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來記錄佇列是空或是滿的狀態。

示意圖:

  1. 宣告佇列參數

2. Dequeue(): 回傳佇列端的資料,並將front往下推移。

3. Enqueue(): 將資料放到佇列的後端。

4. 輸出結果範例:

完整程式碼:https://github.com/gary30404/Data-Structure/blob/master/1/1.2/queue_in_circular_array2.c

Last updated