佇列與堆疊

資料結構會影響到程式的執行效率,解題過程中須想清楚,需要使用的資料結構,為何要使用此資料結構,以下介紹線性資料結構(Queue與Stack。

一、Queue(佇列)

Queue(佇列)是先進來的元素先出去(First In First Out,縮寫為FIFO)的資料結構,通常用於讓程式具有排隊功能,依序執行工作,例如:印表機同時間有多個檔案等待列印,在印表機內會有一個Queue(佇列)的功能,將準備列印的檔案暫存在Queue等待印表機提供列印服務,先送到印表機的檔案先印出來。實作Queue的部分,可以自行撰寫Queue程式,或透過Python串列功能,不須知道內部程式如何實作,只要知道如何在Queue中新增與刪除資料。

Queue(佇列)--使用list實作

(a)範例說明

請實作一個程式將數字1到9依序加入Queue,最後不斷刪除最前面的元素,直到Queue為空的為止,顯示queue的狀態與每個被刪除的元素到螢幕。

(b)預期程式執行結果

[1]

[1, 2]

[1, 2, 3]

[1, 2, 3, 4]

[1, 2, 3, 4, 5]

[1, 2, 3, 4, 5, 6]

[1, 2, 3, 4, 5, 6, 7]

[1, 2, 3, 4, 5, 6, 7, 8]

[1, 2, 3, 4, 5, 6, 7, 8, 9]

1 [2, 3, 4, 5, 6, 7, 8, 9]

2 [3, 4, 5, 6, 7, 8, 9]

3 [4, 5, 6, 7, 8, 9]

4 [5, 6, 7, 8, 9]

5 [6, 7, 8, 9]

6 [7, 8, 9]

7 [8, 9]

8 [9]

9 []

(c)範例程式如下

二、Stack(堆疊)

Stack(堆疊)是後進來的元素先出去(Last In First Out,縮寫為LIFO)的資料結構,隱含在函式的遞迴呼叫,因為遞迴的過程中最後呼叫的函式要優先處理,系統會實作堆疊程式自動處理遞迴呼叫,不須自行撰寫堆疊,特定問題可能需要使用Stack(堆疊)進行解題,例如:程式的括弧配對檢查,右大括號配對最接近未使用的左大括號,將左大括號加進Stack(堆疊)中,一遇到右大括號就取出配對。

Stack(堆疊)--使用list實作

(a)範例說明

請實作一個程式將數字1到9依序加入Stack,依序取出每一個元素顯示在螢幕上,直到Stack空的為止。

(b)預期程式執行結果

[1]

[1, 2]

[1, 2, 3]

[1, 2, 3, 4]

[1, 2, 3, 4, 5]

[1, 2, 3, 4, 5, 6]

[1, 2, 3, 4, 5, 6, 7]

[1, 2, 3, 4, 5, 6, 7, 8]

[1, 2, 3, 4, 5, 6, 7, 8, 9]

9 [1, 2, 3, 4, 5, 6, 7, 8]

8 [1, 2, 3, 4, 5, 6, 7]

7 [1, 2, 3, 4, 5, 6]

6 [1, 2, 3, 4, 5]

5 [1, 2, 3, 4]

4 [1, 2, 3]

3 [1, 2]

2 [1]

1 []

(c)範例程式如下