不再迷茫!手把手的Python入門教學-堆疊、隊列、鏈結串列

更新 發佈閱讀 4 分鐘
用最直白的語言解釋最複雜的概念,一系列教學​讓你在短時間內掌握 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) 卻可以塞進縫隙,達到空間利用的最佳化。

看到這邊是不是覺得霧煞煞,沒關係~這裡準備了精緻圖解,幫助各位理解

vocus|新世代的創作平台
  • 每一個 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 就會從那裡接下去 )

看到這邊,你應該會想說:這些有差嗎?不就是資料的擺放方式不一樣而已…
但是針對不同的問題,使用不同的資料結構,在程式運行的效率上就會有顯著的影響喔!

📌喜歡別忘了給我個讚或按下追蹤喔~

留言
avatar-img
の倉的程式小天地
6會員
32內容數
熱愛做志工的大學生 誤打誤撞跑去讀資管系 既然來到了資管系,那就學習新技能來幫助他人
2025/06/26
舉個例子,有一本 50 萬字的英文小說,要把裡面 t 開頭 e 結尾的單字全部列出來,於是首先我們要訂個規則叫「t 開頭 e 結尾」,然後讓程式依循這個規則把所有字找出來,而這個 “規則” 就是正規表達式。
Thumbnail
2025/06/26
舉個例子,有一本 50 萬字的英文小說,要把裡面 t 開頭 e 結尾的單字全部列出來,於是首先我們要訂個規則叫「t 開頭 e 結尾」,然後讓程式依循這個規則把所有字找出來,而這個 “規則” 就是正規表達式。
Thumbnail
2025/06/25
如果今天要產生一個序列結構 (tuple、list、set、dictionary) ,最直覺就是寫一個迴圈嘛~但一個最簡單的迴圈就要兩三行,如果還有條件判斷就又更長了,今天的內容就是把要用到一整個迴圈寫法的程式碼,縮寫成一行!
Thumbnail
2025/06/25
如果今天要產生一個序列結構 (tuple、list、set、dictionary) ,最直覺就是寫一個迴圈嘛~但一個最簡單的迴圈就要兩三行,如果還有條件判斷就又更長了,今天的內容就是把要用到一整個迴圈寫法的程式碼,縮寫成一行!
Thumbnail
2025/06/25
設計程式如果可以做到結構化,能夠增加程式的可維護性,先前介紹過的函數雖然可以做到,但是當程式碼越來越長,單一的程式檔也會變得更難維護,於是我們就會把程式拆成不同檔案(模組),方便我們維護與分工
Thumbnail
2025/06/25
設計程式如果可以做到結構化,能夠增加程式的可維護性,先前介紹過的函數雖然可以做到,但是當程式碼越來越長,單一的程式檔也會變得更難維護,於是我們就會把程式拆成不同檔案(模組),方便我們維護與分工
Thumbnail
看更多
你可能也想看
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News