用最直白的語言解釋最複雜的概念,一系列教學讓你在短時間內掌握 Python
本篇會用到物件導向的寫法,雖然寫這篇的時候我還沒講,但之後有一連串講述的物件導向的文章,連結我放下面喔!
物件導向相關文章:
不再迷茫!手把手的Python入門教學-物件導向初探
不再迷茫!手把手的Python入門教學-繼承
不再迷茫!手把手的Python入門教學-多型、抽象類別
不再迷茫!手把手的Python入門教學-封裝
堆疊 (Stack)
後進先出(LIFO, Last In First Out) 就像疊盤子,最後放的會最先被拿走。

堆疊 範例
隊列 (Queue)
先進先出(FIFO, First In First Out) 就像排隊,先來的先走。

隊列 範例
鏈結串列 (Linked List)
一種由節點(Node)串接而成的資料結構 就像火車,每節車廂(節點)都有連接下一節的資訊。
一開始介紹的兩種資料結構都是把所有資料塞進一個 list 裡面,他的缺點就是需要一塊連續的記憶體空間,而當資料數過於龐大時,或記憶體空間被其他應用程式切割得很破碎時,就會發生記憶體配置不足的問題,所以 linked list 就是用來解決這個問題,因為它是由許多小的節點(Node)互相連結而成。
就像大石頭 (很大的 stack 或 queue) 裝不進放滿小石頭的瓶子 (記憶體空間) 裡,但沙子 (每一個 node) 卻可以塞進縫隙,達到空間利用的最佳化。
看到這邊是不是覺得霧煞煞,沒關係~這裡準備了精緻圖解,幫助各位理解

- 每一個 node 都包含一個 data 和一個 next
- data 就是實際儲存的值
- next 就是這個 node 所連接 (指向) 的下一個 node
- 第一個 node 所指向的會是 None (無)
- 而每次新增都會從最後一個 node (就是 data = 3 的那個 node) 往後新增
接下來看到虛線以下的圖,這裡的每一格都是一個記憶體 (aka. 資料儲存空間),格子上方的字是變數名稱,格子下方的是硬體的記憶體位址編號,格子內就是該格記憶體所儲存的內容
- 看到第55行的
linked_list.add(1)
- 執行
new_node = Node(data)
- →隨機分配記憶體給新的 node
- 執行
new_node.next = self.head
- →把 .head 內的值代入到新的 node 的 .next
self.head = new_node
- →把新的 node 的記憶體位址 (X06) 代入到 .head 內
( 意思就是新的 node 變成整個串列的"頭",下次新增 node 就會從那裡接下去 )
看到這邊,你應該會想說:這些有差嗎?不就是資料的擺放方式不一樣而已…
但是針對不同的問題,使用不同的資料結構,在程式運行的效率上就會有顯著的影響喔!
📌喜歡別忘了給我個讚或按下追蹤喔~