擁抱「資料結構」的「演算法」(04) - 單向連結串列 Singly Linked List
前言
陣列有一個很大的特色,就是一定要預留一段的連續空間
來儲存資料,所以當有空間已經用完,且有額外的資料想要存入時,就會非常不方便,所以今天要來介紹另外一種線性串列,這一種資料結構稱為連結串列 Linked List
,不用像陣列那樣需要在一開始就保留連續空間,串列的資料可以存在任意的位置
,然後透過連結
將資料一個一個串起來,讓我們一起來看看生活中的例子吧
生活常識
保健盒
你還記得小美吃保健食品的故事嗎?有沒有哪些情境是讓你印象深刻的,像我自己覺得保健食品盒雖然格子很多很方便,但是如果遇到放錯格子
或想調整保健品的順序,真的會很崩潰,因為可能要把保健品通通拿出來再重新放一遍,很曠日廢時,但其實有一種保健盒很方便,提供了組裝功能
,我們一起來看看下面的圖:
圖片來源:momo
透過上圖,可以觀察到,每個盒子左右
兩邊,分別做了凸槽
與凹槽
設計,意思也就是說,每個盒子都是獨立的
,可以單獨一格使用,也可以把很多格串再一起使用,增加了很多彈性,如果想要調整順序或數量都是很容易的事情,如果放錯格子或放錯順序,完全不需要把保健品拿出來,只需要將小格子拆下來,再重新組合即可,不像一體成形
的盒子那樣,要調整就只能大搬風,保健品通通要拿出來
車廂
生活中會接觸到交通工具,像是火車,也是將很多車廂串在一起,今天要增加車廂或是減少車廂,都可以處理,因為車廂可以放在倉庫,需要用到在去挪出來並串到火車上,用講的可能不好理解,一起來欣賞一下網友提供的youtube影片
加掛車廂
維修車廂
兔子舞
童年回憶XD,每個人將雙手搭在前者的肩膀看,然後進行左跳右跳、跳跳跳的團康活動,透過我們的雙手可以快速的將人串再一起,讓活動氣氛達到最高點XD
圖片來源:百度百科
人脈弱連結
不知道你有沒有這樣的經驗,當今天認識一個新朋友的時候,互相加 Facebook 好友時,才發現其實你與對方有很多共同朋友,但之前都不知道;亦或是從對方的朋友清單中,發現他認識某某領域的朋友,是你也很想認識,想請他引薦的,其實人與人之間也存在某種連結,或是我們常常說的緣分
,如果今天跟對方沒有緣分,就像兩條平行線,永遠沒有交集XD,如果想要有交集,就必須創造連結
如果今天小美,想邀請祖克伯來公司演講,但小美不認識祖克伯,但小美曾聽過自己的朋友小明說,他朋友小華的爸爸是祖克伯,所以今天小美在不認識小華的情況下,想要聯繫到祖克伯,就必須先拜託小明,小明再去拜託小華,小華再去拜託自己的爸爸祖克伯,才能成功讓小美直接聯繫到祖克伯
專業知識 - 單向連結串列 Singly Linked List
連結串列有細分單向
、雙向
與環狀
連結串列,今天先來講單向連結串列
特性
- 不需要預留固定數量且一段連續的儲存空間
- 一個節點包含
資料
與指標
- 必須
單向
依序讀取節點,透過指標
,才知道下一個要讀取哪個節點
(無法像陣列透過索引就能讀取資料) 插入或新增節點
很方便,只要改變指標
即可
火車例子
不需要指定大小,不需要預留一段連續的儲存空間
車廂數量沒有固定值,車廂可隨意調整,不需要連續一個節點包含
資料
與指標
每個車廂都可以載人
,並且會以連接器
串接下一個車廂必須依序讀取節點,透過
指標
,才知道下一個要讀取哪個節點
(無法像陣列透過索引就能讀取資料)
火車進站時,一定會先看到第一車廂、第二車廂,依序到最後一節車廂,你一定要站在月台看到最後面,才會知道這個車次的最後一個車廂是什麼,可能是夜間婦女車廂也不一定插入或新增節點
很方便,只要改變指標
即可
如果今天鐵路局發現,下班時間搭乘人數很多,就可以考慮加掛車廂
。如果進廠維修時,發現第四車廂發生故障,可直接將故障車廂卸下
,並將正常的第三車廂繼續串接第五車廂,只要調整車廂與車廂之間的連結器
即可
今日小結
可能會覺得串列
好像比陣列
更好用,其實兩者還是要依照實際需求來使用,雖然串列中的節點,可快速的新增或移除,但如果今天想快速存取某一個節點,則非常不方便,因為串列之間的節點必須依序讀取
才會知道節點的指標指向哪裡,不像陣列可以透果索引直接存取資料,例如小美想到找到祖柏克,就只能透過朋友間的層層聯繫,才能找到人,但如果小美今天知道祖柏克住在哪,就能直接找到他,就不需要透過朋友穿針引線的幫忙囉,同一件事情根據情況不同,所使用的方式也會不同
今日謎題
小美
發現之前的神祕客就是小乖
,他想跟小乖開啟對話,但他們兩個人並不認識,必須逐一請小明、小華、小草與小英轉達,才能將訊息傳達給小乖,請問你有發現神秘圖形嗎?
昨日解謎
解謎說明:要清楚二維陣列的存取使用方式,透過索引找到相對應的儲存位置,答案就呼之欲出囉
Maps[2,2] = D
Maps[0,1] = I
Maps[3,0] = M
Maps[1,3] = E
Maps[4,0] = N
Maps[5,0] = S
Maps[5,3] = I
Maps[4,1] = O
Maps[7,1] = N
答案就是DIMENSION,維度 Dimension,你答對了嗎XD
留言
張貼留言