從Python認識資料結構(四).陣列

閱讀時間約 3 分鐘
各位好,再開始新的章節前,我們先對鏈結串列(Linked List)做一些補充,我們在從Python認識資料結構(三).陣列與之前的文章中設計了許多動態鏈結串列,也提過鏈結串列的好處是不用提前指定記憶體空間,較靜態結構來說更保有彈性,但在之前的範例我們會發現,鏈結串列也隱藏了一些問題,舉例來說,最明顯的問題就是當我們丟失了head節點時,我們就直接失去了整個串列資料。為了能避免上述問題發生,我們可以設計與過往稍有不同的鏈結串列來處理這個問題。

4-1、單向鏈結串列 vs. 環形鏈結串列

這邊我們要先清楚的區分單向鏈結串列(Single Linked List)與環形鏈結串列(Circular Linked List)的差異,過往我們所介紹的功能實作方法都是建立單向鏈結串列,由首節點head出發,最後一個節點的next屬性指向None;環形鏈結串列則是將最後一個節點的next屬性指向head,如此一來,就算我們丟失了head節點,也可以從串列中的任何一個節點找回所有資料,避免了單向鏈結串列會造成的問題,如下圖。
單向鏈結串列 vs. 環形鏈結串列
環形鏈結串列的走訪有一個部分要提醒的是,通常在單向鏈節串列中,while回圈內判斷的中止條件都是(ptr != None),這是因為單向鏈結串列最後一個節點的next屬性為None,當ptr等於None時,也代表我們正處於最後一個節點位置。環形鏈結就有所不同,環形鏈結最後一個節點的next屬性指向了head,如果我們依舊採用等於None來作為判斷跳出的條件,那麼迴圈將不停地重複,所以我們將終止條件設定為(ptr != head),來確保我們完成了一趟環形鏈結串列的走訪。

4-2、單向鏈結串列 vs. 雙向鏈結串列(Double Linked List)

既然有單向鏈結串列,肯定也有雙向的鏈結串列。無論是單向鏈結串列,或是剛剛提到的環形鏈結串列,不難發現其都是依照順序向右(如4-1圖示)尋找下一個節點位置,此時若發生鏈結斷裂,可能是丟失或被錯誤賦值,就會使得整個單向鏈結串列資訊遺失。為了避免此情況,我們可以設計雙向鏈結串列,此串列不僅向右邊鏈結,同時也向左鏈結前位節點位置,如此一來,即使節點其中一個鏈節斷裂,也可以透過另一條鏈結重新建立起節點順序。
雙向與環形兩者不衝突,下圖是由4-1所設計的環形鏈結串列結構修改後的環形雙向鏈結串列同時保持了環形與雙向鏈結的特色:最後一個節點的next屬性指向head,以及具有兩方向的鏈結,分別指向前一個與後一個節點位置
相較於單向鏈結串列,雙向鏈結串列雖避免了鏈結丟失的問題,但同時也需要更多的記憶體空間來儲存前位節點位置,實際上使用仍須根據資料的型態來決定使用哪種資料結構。
環形雙向鏈結串列
以下是透過手動方式設計雙向鏈結串列的方式,雙向鏈結的走訪可由head或最後一個節點當開頭,根據next或previous屬性找到下一個節點位置。至於新增、刪除或修改雙向鏈結串列的方式,就留給各位自己實做看看,與單向鏈結串列方式雷同,只是需要注意不要遺失前位節點的資料即可。
以上部分就是Python中建立陣列的方式介紹,順便多介紹了環形鏈結串列與雙向鏈結串列,下一節我們會介紹新的資料結構-堆疊(Stack),有任何問題歡迎寄信至我的信箱或於底下留言和我討論。

參考書目

  1. 圖解資料結構 - 使用Python(第二版)
  2. 圖書演算法 - 使用Python
  3. Python3 物件導向程式設計 第二版
  4. 精通Python (第二版)
4會員
8Content count
本專題將以Python程式語言來實作資料結構,依序從陣列(Array)、堆疊(Stack)、佇列(Queue)、樹(Tree)到圖(Graph),透過不同方式來建立資料結構,並討論部分細節如:建構難度、記憶體空間、效率等等。
留言0
查看全部
發表第一個留言支持創作者!
炯男孩的沙龍 的其他內容
本文會介紹靜態結構 - 串列(List)與動態結構 - 鏈結串列(Linked List)來實踐陣列的不同功能,如:刪除、計算元素個數與反轉。
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。
陣列是Python語言的最基礎也最容易實作的資料結構,主要可以透過兩種方式在Python上實踐陣列,其中一種是靜態結構 - 串列(List),另一種則是動態結構 - 鏈結串列(Linked List)。 我們會依序介紹這兩種作法如何在Python上執行陣列的相關功能,並比較兩種方法之間的差異。
本文會介紹靜態結構 - 串列(List)與動態結構 - 鏈結串列(Linked List)來實踐陣列的不同功能,如:刪除、計算元素個數與反轉。
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。
陣列是Python語言的最基礎也最容易實作的資料結構,主要可以透過兩種方式在Python上實踐陣列,其中一種是靜態結構 - 串列(List),另一種則是動態結構 - 鏈結串列(Linked List)。 我們會依序介紹這兩種作法如何在Python上執行陣列的相關功能,並比較兩種方法之間的差異。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
我從追星AKB48開始燃起了學語言的熱情。 又在研究Python的程式語言原理,撬開了語言學的大門。
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
馬克•庫班(NBA獨行俠隊老闆,億萬富翁)說過:「人工智慧、深度學習和機器學習,不論你現在是否能夠理解這些概念,你都應該學習。否則三年內,你就會像被滅絕的恐龍一樣被社會淘汰。現在不開始,以後就來不及了。」
Thumbnail
最近因為眼睛出了問題,再加上政策提案等等大事件交雜而停更了好一陣子。這篇會提到的漫畫跟遊戲作品幾部:咒術迴戰、進擊的巨人、鬼滅之刃、怪獸8號、巫師(狩魔人)
Thumbnail
常常有一些粉絲或讀者告訴我,他明明工作看起來一切順利,但卻莫名焦躁,越來越搞不清楚自己「真正想做的事情」是什麼了。後來了解後發現,問題也許是他為了回應他人的期待,把精力都花在別人身上,忘了切換成「自我模式」了。大部分人都習慣了「他人模式」,等到想轉為「自我模式」時,卻想不起來自己到底想做什麼。
Thumbnail
這篇我想跟您說 1 健康鞋背後的設計原理 2 常見的健康鞋設計 3 選擇健康鞋的時機
Thumbnail
俗話說「養樹護根,養人護足。」足部是我們步行走路時的唯一接觸點,足部不穩,上面的身體也會跟著歪。在我們治療理念裡,最重視的就是「脊」與「足」。
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
我從追星AKB48開始燃起了學語言的熱情。 又在研究Python的程式語言原理,撬開了語言學的大門。
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
馬克•庫班(NBA獨行俠隊老闆,億萬富翁)說過:「人工智慧、深度學習和機器學習,不論你現在是否能夠理解這些概念,你都應該學習。否則三年內,你就會像被滅絕的恐龍一樣被社會淘汰。現在不開始,以後就來不及了。」
Thumbnail
最近因為眼睛出了問題,再加上政策提案等等大事件交雜而停更了好一陣子。這篇會提到的漫畫跟遊戲作品幾部:咒術迴戰、進擊的巨人、鬼滅之刃、怪獸8號、巫師(狩魔人)
Thumbnail
常常有一些粉絲或讀者告訴我,他明明工作看起來一切順利,但卻莫名焦躁,越來越搞不清楚自己「真正想做的事情」是什麼了。後來了解後發現,問題也許是他為了回應他人的期待,把精力都花在別人身上,忘了切換成「自我模式」了。大部分人都習慣了「他人模式」,等到想轉為「自我模式」時,卻想不起來自己到底想做什麼。
Thumbnail
這篇我想跟您說 1 健康鞋背後的設計原理 2 常見的健康鞋設計 3 選擇健康鞋的時機
Thumbnail
俗話說「養樹護根,養人護足。」足部是我們步行走路時的唯一接觸點,足部不穩,上面的身體也會跟著歪。在我們治療理念裡,最重視的就是「脊」與「足」。