連結串列

73 阅读6分钟

連結串列 Linked List,不用像陣列那樣需要在一開始就保留連續空間,串列的資料可以存在任意的位置,然後透過連結將資料一個一個串起來,

像我自己覺得保健食品盒雖然格子很多很方便,但是如果遇到放錯格子或想調整保健品的順序,真的會很崩潰,因為可能要把保健品通通拿出來再重新放一遍,很曠日廢時,但其實有一種保健盒很方便,提供了組裝功能,我們一起來看看下面的圖:

image.png

透過上圖,可以觀察到,每個盒子左右兩邊,分別做了凸槽凹槽設計,意思也就是說,每個盒子都是獨立的,可以單獨一格使用,也可以把很多格串再一起使用,增加了很多彈性,如果想要調整順序或數量都是很容易的事情,如果放錯格子或放錯順序,完全不需要把保健品拿出來,只需要將小格子拆下來,再重新組合即可,不像一體成形的盒子那樣,要調整就只能大搬風,保健品通通要拿出來

車廂

生活中會接觸到交通工具,像是火車,也是將很多車廂串在一起,今天要增加車廂或是減少車廂,都可以處理,因為車廂可以放在倉庫,需要用到在去挪出來並串到火車上,

兔子舞

童年回憶 XD,每個人將雙手搭在前者的肩膀看,然後進行左跳右跳、跳跳跳的團康活動,透過我們的雙手可以快速的將人串再一起,讓活動氣氛達到最高點 XD

image.png

人脈弱連結

不知道你有沒有這樣的經驗,當今天認識一個新朋友的時候,互相加 Facebook 好友時,才發現其實你與對方有很多共同朋友,但之前都不知道;亦或是從對方的朋友清單中,發現他認識某某領域的朋友,是你也很想認識,想請他引薦的,其實人與人之間也存在某種連結,或是我們常常說的緣分,如果今天跟對方沒有緣分,就像兩條平行線,永遠沒有交集 XD,如果想要有交集,就必須創造連結

如果今天小美,想邀請祖克伯來公司演講,但小美不認識祖克伯,但小美曾聽過自己的朋友小明說,他朋友小華的爸爸是祖克伯,所以今天小美在不認識小華的情況下,想要聯繫到祖克伯,就必須先拜託小明,小明再去拜託小華,小華再去拜託自己的爸爸祖克伯,才能成功讓小美直接聯繫到祖克伯

image.png

火車例子

  1. 不需要指定大小,不需要預留一段連續的儲存空間
    車廂數量沒有固定值,車廂可隨意調整,不需要連續

  2. 一個節點包含資料指標
    每個車廂都可以載,並且會以連接器串接下一個車廂

  3. 必須依序讀取節點,透過指標,才知道下一個要讀取哪個節點 (無法像陣列透過索引就能讀取資料)
    火車進站時,一定會先看到第一車廂、第二車廂,依序到最後一節車廂,你一定要站在月台看到最後面,才會知道這個車次的最後一個車廂是什麼,可能是夜間婦女車廂也不一定\

  4. 插入或新增節點很方便,只要改變指標即可
    如果今天鐵路局發現,下班時間搭乘人數很多,就可以考慮加掛車廂。如果進廠維修時,發現第四車廂發生故障,可直接將故障車廂卸下,並將正常的第三車廂繼續串接第五車廂,只要調整車廂與車廂之間的連結器即可

image.png

可能會覺得串列好像比陣列更好用,其實兩者還是要依照實際需求來使用,雖然串列中的節點,可快速的新增或移除,但如果今天想快速存取某一個節點,則非常不方便,因為串列之間的節點必須依序讀取才會知道節點的指標指向哪裡,不像陣列可以透果索引直接存取資料,例如**小美想到找到祖柏克,就只能透過朋友間的層層聯繫,才能找到人,但如果小美今天知道祖柏克住在哪,就能直接找到他,就不需要透過朋友穿針引線的幫忙囉**,

雙向連結串列

有跟好朋友勾肩搭背的經驗嗎,比對昨天的兔子舞的單向隊形,隊伍只能靠帶頭的人決定,大家的眼睛只能看同一個方向,自己只知道前面是誰,但卻不知道自己後面是誰,但使用左手與右手去勾肩搭背的隊形,大家都會很清楚自己的左邊跟右邊是誰,如果唱名本隊形的組員名字,不管是由右往左唱名,或由左往右唱名,都沒有問題

  1. 一個節點包含資料與 2 個指標 (指向前面與後面)
  2. 雙向讀取節點
  3. 可快速修補脫落的節點
  • 較浪費空間 (含有 2 個指標)
  • 加入節點 (改變 4 個指標) 與刪除節點 (改變 2 個指標),比較困難

環狀連結串列

月潭其中一個特色就是有環湖路線,可以騎腳踏車或開車盡覽美景,如果你想到達某一個地點,是無法直達的,一定要逐一瀏覽才能到達指定地點 image.png image.png 述的遊戲,就很像是環狀連節串列,不管鬼從哪邊開始跑,從哪邊開始挑對象,他跑的路徑,一定會經過所有人

  • 將單向連接串列**最後一個節點的指標**,指向**第一個節點**
  • 不論從哪個節點開始讀取,都能經過所有節點

火車可以單向行駛,也可雙向行駛,根據鐵軌的設計,甚至可以提供環湖行程,而對應到資料結構中的 3 種連結串列,單向、雙向、環狀連結也有異曲同工之妙,希望這些例子可以增加大家的記憶,!