資料結構與演算法教學系列文 (2) - 陣列、鏈結串列、堆疊、佇列
資料結構(Data Structure)
資料結構是一種設計、組織、儲存資料的方式,以實現最佳性能和效率。這些結構包含不同形式,像是陣列、鍊結列表、樹、圖等等。選擇適當的資料結構對於解決特定的問題至關重要,不同的資料結構可以用於不同的應用,並且可以極大地影響程序的運行時間和記憶體使用。
陣列(Array)
可隨機存取的一串連續記憶體位址。
Leetcode
鏈結串列(Linked List)
元素間彼此串聯在一起,形成一條鍊子的資料結構。
也可以是上圖雙向連結的形式。
Leetcode
堆疊(Stack, Last-In-First-Out, LIFO)
單向進出,後進先出的資料結構,如同把東西堆疊起來。
佇列(Queue, First-In-First-Out, FIFO)
單向進出,先進先出的資料結構,如同在排隊一般。
Stack & Queue in Python: Collections.deque()
Deque(發音類似 Deck)為 Double-Ended Queue 的縮寫,顧名思義,Deque 是一個支援雙向存取的 Queue,也就是說,你可以從頭跟尾插入或移除元素。
1 | from collections import deque |
1 | Output: |
Q:那他與 Stack 跟 Queue 有甚麼關係呢?
A:
Stack: 只使用 D.append() 與 D.pop() 的 deque
Queue: 只使用 D.append() 與 D.popleft() 的 deque其實只要符合 Stack 跟 Queue 的性質都可以。
因此以下使用方式也對,但較不建議使用:
Stack: 只使用 D.appendleft() 與 D.popleft() 的 deque
Queue: 只使用 D.appendleft() 與 D.pop() 的 deque
以下為使用 collections.deque 來實作 stack 與 queue 的例子:
1 | from collections import deque |
另外也可以參考 Python 官方對 將 List 作為 Stack / Queue 使用 的說明。
介紹完 collections.deque() 以後,讓我們來實際練習一下 Leetcode 的題目吧!
Leetcode
Stack
Queue
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Jack's Space!
評論