(資料結構與演算法)經典線性表 鍊錶實現

2021-10-09 16:46:22 字數 2901 閱讀 9797

(有乙個大神朋友跟我說,學資料結構,就得自己動手寫出這是什麼,用程式做出它是怎麼做的)

我們接觸的資料結構有:線性結構和非線性結構。

我們常見到的線性結構:線性表、棧、佇列

今天我們來看看這個一直說到的線性表。

關於線性表

定義:線性表是具有相同資料型別的n(n>=0)個資料元素的有限序列。(n為表長,n=0時線性表是乙個空表)

特點:①元素個數有限;②具有邏輯上的順序性,元素有先後次序之分;③除表頭元素外,每個元素有且僅有乙個直接前驅;④除表尾元素外,每個元素有且僅有乙個直接後繼;⑤各元素的資料型別相同(占用相同大小的儲存空間)

線性表的鏈式表示

《**實現:c/c++>

(順序表在實現過程相比鍊錶會簡單一些,值得一提的是:順序表的位序不用於陣列下標,請一定要注意邊界問題,可能**突然就越界了,而且還很難找)

線性表的兩個儲存結構的比較

順序表:

插入(insert):時間複雜度為o(n),平均移動結點次數為n/2

刪除(delete):時間複雜度為o(n),平均移動(n-1)/2

按值查詢(find_value):時間複雜度為o(n)

按位查詢(find_position):時間複雜度為o(1)

鍊錶:插入(list_insert):時間複雜度為o(n),但是這裡的時間複雜度主要在於查詢位置,即找到對應的位置(p = p->next),相比順序表大量的結點移動,所以雖然是相同的時間複雜度o(n),但往往時間上鍊表的插入更優。

刪除(list_delete):時間複雜度為o(n),同插入理,刪除操作,時間上往往選用鍊錶更快。

按值查詢(find_value):時間複雜度為o(n)

按位查詢(find_position):時間複雜度為o(n)

求表長(list_length):如果沒有外接計數(如我寫的list類裡的len),則需要從頭結點開始順序依次訪問各節點,此時時間複雜度為o(n)

資料結構與演算法 線性表 鍊錶

我畫了20張圖,終於讓女朋友學會了翻轉鍊錶 碼海 該文章介紹了鍊錶的基礎知識,程式區域性性原理 重點關注 尾插法 public class linkedlist tmp.next newnode val 尾部插入 public class linkedlist public static void ...

資料結構與演算法 線性表 鍊錶

書接上文 前篇提到的順序表是線性表的一種表示形式,但是在頻繁的增刪操作中 順序表是不夠打的 這就要引出今天的鍊錶了 三 迴圈鍊錶的基本演算法 四 雙向鍊錶的基本演算法總結 除頭結點和尾結點外,每個結點有且只有乙個直接前驅和直接後繼 最後乙個結點的指標為null 邏輯關係 資料元素之間的邏輯關係是由結...

資料結構 線性表 鍊錶

在之前了解完什麼是資料結構之後 資料結構 線性表 順序表 陣列 我們再來看看線性結構另外一種實現方式 鍊錶順序表中的鍊錶沒有物理上的連續儲存要求,只需要在儲存資料時通過 鏈 的方式將資料進行連線,而這個 鏈 的實現就是通過指標來實現的。鍊錶的連續儲存方式 對於抽象資料型別來說,每一種資料結構都有自己...