一:線性表的簡單回顧
上一篇跟大家聊過“線性表"順序存儲,通過實驗,大家也知道,如果我每次向
順序表的頭部插入元素,都會引起痙攣,效率比較低下,第二點我們用順序存儲時,容
易受到長度的限制,反之就會造成空間資源的浪費。
二:連結清單
對于順序表存在的若幹問題,連結清單都給出了相應的解決方案。
1. 概念:其實連結清單的“每個節點”都包含一個”資料域“和”指針域“。
”資料域“中包含目前的資料。
”指針域“中包含下一個節點的指針。
”頭指針”也就是head,指向頭結點資料。
“末節點“作為單向連結清單,因為是最後一個節點,通常設定指針域為null。

代碼段如下:
2.常用操作:
連結清單的常用操作一般有:
①添加節點到連結尾,②添加節點到連結清單頭,③插入節點。
④删除節點,⑤按關鍵字查找節點,⑥取連結清單長度。
<1> 添加節點到連結尾:
前面已經說過,連結清單是采用指針來指向下一個元素,是以說要想找到連結清單最後一個節點,
必須從頭指針開始一步一步向後找,少不了一個for循環,是以時間複雜度為o(n)。
<2> 添加節點到連結清單頭:
大家現在都知道,連結清單是采用指針指向的,要想将元素插傳入連結表頭,其實還是很簡單的,
思想就是:① 将head的next指針給新增節點的next。②将整個新增節點給head的next。
是以可以看出,此種添加的時間複雜度為o(1)。
效果圖:
<3> 插入節點:
其實這個思想跟插入到”首節點“是一個模式,不過多了一步就是要找到目前節點的操作。然後找到
這個節點的花費是o(n)。上圖上代碼,大家一看就明白。
代碼段:
<4> 删除節點:
這個也比較簡單,不解釋,圖跟代碼更具有說服力,口頭表達反而讓人一頭霧水。
當然時間複雜度就為o(n),n是來自于查找到要删除的節點。
<5> 按關鍵字查找節點:
這個思想已經包含到“插入節點”和“删除節點”的具體運用中的,其時間複雜度為o(n)。
<6> 取連結清單長度:
在單連結清單的操作中,取連結清單長度還是比較糾結的,因為他不像順序表那樣是在記憶體中連續存儲的,
是以我們就糾結的周遊一下連結清單的總長度。時間複雜度為o(n)。
好了,最後上一下總的運作代碼:
運作結果:
當然,單連結清單操作中有很多是o(n)的操作,這給我們帶來了尴尬的局面,是以就有了很多的
優化方案,比如:雙向連結清單,循環連結清單。靜态連結清單等等,這些希望大家在懂得單連結清單的情況下
待深一步的研究。