佇列與堆疊
資料結構會影響到程式的執行效率,解題過程中須想清楚,需要使用的資料結構,為何要使用此資料結構,以下介紹線性資料結構(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)範例程式如下