資料結構與演算法 通俗易懂說鍊錶

2022-06-01 22:24:21 字數 1584 閱讀 8491

鍊錶(linked list)由一些節點組成,物理儲存非連續的線性表。其中每個節點都會儲存下個節點的指標,由於實際儲存空間不連續,對鍊錶插入節點,刪除節點可以達到o(1)的複雜度,但是對乙個節點的訪問需要o(n)的時間。

鍊錶有單向鍊錶,雙向鍊錶。

結構體表示為:

//單向鍊錶節點資料結構

插入節點操作:

單向鍊錶中由四個資料節點,資料1,資料2,資料3,資料4,現在資料1和資料2節點間插入資料5,只需把資料1節點的pnext指向新的節點,把新節點的pnext指向資料2節點即可。

刪除節點操作:

刪除節點2,只需把第乙個節點的pnext執行資料3節點,同時釋放節點2的儲存空間即可。

雙向鍊錶有別於單向的,每個節點除了資料項外有兩個指標分別指向前乙個節點和後乙個節點,占用空間會大一些,可以實現從頭到尾的遍歷,又可以從尾到頭遍歷。

結構體表示為:

//雙向鍊錶節點資料結構

插入節點操作:

節點1與節點2之間插入新節點5,需要把節點1的pnext指向節點5,節點5的phead指向節點1,節點5的pnext指向節點2,節點2的phead指向節點5,如下圖所示:

刪除節點操作:

刪除節點2,把節點1的pnext指向節點3,把節點3的phead指向節點1,同時釋放節點2的儲存空間即可。

四:鍊錶與陣列區別

1.鍊錶儲存空間不連續,可以充分利用碎片空間,陣列的儲存空間是連續的,記憶體空間要求高,必須要有足夠連續的記憶體空間。

2.鍊錶的插入刪除元素簡單,無需對元素移動,但查詢元素會慢,陣列對元素的插入刪除較複雜,同時使用時要預先指定長度,但陣列的查詢會很快。

資料結構與演算法 鍊錶

題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法1 cpp view plain copy print color 000000 合併鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct listnod...

資料結構與演算法 鍊錶

在講述鍊錶之前讓我們對資料結構進行乙個簡單的回顧 我們知道,資料結構指的是描述實際問題中各個資料項節點之間的前後邏輯結構關係,即要麼是線性結構 即某一資料項的前繼節點和後繼節點有且只有乙個 要麼是非線性結構 即某一資料節點的前驅或者後繼節點不止乙個 在確定了實際資料項的資料結構之後,我們要採用某種儲...

資料結構與演算法 鍊錶

反轉鍊錶 def reverse head q none p heap while p temp p.next p.next q q pp temp return p判斷鍊錶環 def meetingnode head if not head return slow head fast head.n...