連結串列 Linked List,不用像陣列那樣需要在一開始就保留連續空間,串列的資料可以存在任意的位置,然後透過連結將資料一個一個串起來,
像我自己覺得保健食品盒雖然格子很多很方便,但是如果遇到放錯格子或想調整保健品的順序,真的會很崩潰,因為可能要把保健品通通拿出來再重新放一遍,很曠日廢時,但其實有一種保健盒很方便,提供了組裝功能,我們一起來看看下面的圖:
透過上圖,可以觀察到,每個盒子左右兩邊,分別做了凸槽與凹槽設計,意思也就是說,每個盒子都是獨立的,可以單獨一格使用,也可以把很多格串再一起使用,增加了很多彈性,如果想要調整順序或數量都是很容易的事情,如果放錯格子或放錯順序,完全不需要把保健品拿出來,只需要將小格子拆下來,再重新組合即可,不像一體成形的盒子那樣,要調整就只能大搬風,保健品通通要拿出來
車廂
生活中會接觸到交通工具,像是火車,也是將很多車廂串在一起,今天要增加車廂或是減少車廂,都可以處理,因為車廂可以放在倉庫,需要用到在去挪出來並串到火車上,
兔子舞
童年回憶 XD,每個人將雙手搭在前者的肩膀看,然後進行左跳右跳、跳跳跳的團康活動,透過我們的雙手可以快速的將人串再一起,讓活動氣氛達到最高點 XD
人脈弱連結
不知道你有沒有這樣的經驗,當今天認識一個新朋友的時候,互相加 Facebook 好友時,才發現其實你與對方有很多共同朋友,但之前都不知道;亦或是從對方的朋友清單中,發現他認識某某領域的朋友,是你也很想認識,想請他引薦的,其實人與人之間也存在某種連結,或是我們常常說的緣分,如果今天跟對方沒有緣分,就像兩條平行線,永遠沒有交集 XD,如果想要有交集,就必須創造連結
如果今天小美,想邀請祖克伯來公司演講,但小美不認識祖克伯,但小美曾聽過自己的朋友小明說,他朋友小華的爸爸是祖克伯,所以今天小美在不認識小華的情況下,想要聯繫到祖克伯,就必須先拜託小明,小明再去拜託小華,小華再去拜託自己的爸爸祖克伯,才能成功讓小美直接聯繫到祖克伯
火車例子
-
不需要指定大小,不需要預留一段連續的儲存空間
車廂數量沒有固定值,車廂可隨意調整,不需要連續 -
一個節點包含
資料與指標
每個車廂都可以載人,並且會以連接器串接下一個車廂 -
必須依序讀取節點,透過
指標,才知道下一個要讀取哪個節點(無法像陣列透過索引就能讀取資料)
火車進站時,一定會先看到第一車廂、第二車廂,依序到最後一節車廂,你一定要站在月台看到最後面,才會知道這個車次的最後一個車廂是什麼,可能是夜間婦女車廂也不一定\ -
插入或新增節點很方便,只要改變指標即可
如果今天鐵路局發現,下班時間搭乘人數很多,就可以考慮加掛車廂。如果進廠維修時,發現第四車廂發生故障,可直接將故障車廂卸下,並將正常的第三車廂繼續串接第五車廂,只要調整車廂與車廂之間的連結器即可
可能會覺得串列好像比陣列更好用,其實兩者還是要依照實際需求來使用,雖然串列中的節點,可快速的新增或移除,但如果今天想快速存取某一個節點,則非常不方便,因為串列之間的節點必須依序讀取才會知道節點的指標指向哪裡,不像陣列可以透果索引直接存取資料,例如**小美想到找到祖柏克,就只能透過朋友間的層層聯繫,才能找到人,但如果小美今天知道祖柏克住在哪,就能直接找到他,就不需要透過朋友穿針引線的幫忙囉**,
雙向連結串列
有跟好朋友勾肩搭背的經驗嗎,比對昨天的兔子舞的單向隊形,隊伍只能靠帶頭的人決定,大家的眼睛只能看同一個方向,自己只知道前面是誰,但卻不知道自己後面是誰,但使用左手與右手去勾肩搭背的隊形,大家都會很清楚自己的左邊跟右邊是誰,如果唱名本隊形的組員名字,不管是由右往左唱名,或由左往右唱名,都沒有問題
- 一個
節點包含資料與2 個指標(指向前面與後面) - 可
雙向讀取節點 - 可快速修補脫落的節點
- 較浪費空間 (含有 2 個指標)
- 加入節點 (改變 4 個指標) 與刪除節點 (改變 2 個指標),比較困難
環狀連結串列
月潭其中一個特色就是有環湖路線,可以騎腳踏車或開車盡覽美景,如果你想到達某一個地點,是無法直達的,一定要逐一瀏覽才能到達指定地點
述的遊戲,就很像是環狀連節串列,不管鬼從哪邊開始跑,從哪邊開始挑對象,他跑的路徑,
一定會經過所有人
- 將單向連接串列**
最後一個節點的指標**,指向**第一個節點** - 不論從哪個節點開始讀取,
都能經過所有節點
火車可以單向行駛,也可雙向行駛,根據鐵軌的設計,甚至可以提供環湖行程,而對應到資料結構中的 3 種連結串列,單向、雙向、環狀連結也有異曲同工之妙,希望這些例子可以增加大家的記憶,!