資料結構-連結串列

ITzhazhassc發表於2020-10-12

陣列需要一塊連續的記憶體用來儲存資料,而連結串列恰恰相反,它並不需要一塊連續的記憶體,它通過指標將不連續的記憶體塊串起來。

連結串列結構很多,我們說下最常見的,單連結串列,雙向連結串列和迴圈連結串列。

我們先看比較簡單的單連結串列

 

如上圖可以看出來,圖中的每個節點不僅需要儲存資料,還需要記錄一個指向下一個節點的指標,如圖所示,我們把記錄下一個節點的指標叫做後繼指標 next

圖中有兩個節點比較特殊第一個節點我們叫做頭節點,最後一個節點我們叫做尾結點,頭節點記錄了這個連結串列的基地址,尾節點的指標不是指向一個節點,而是指向一個空地址NULL。

我們知道在陣列的插入和刪除操作後,為了保持連續記憶體的特點需要搬移大量資料,而在連結串列中我們不需要保持連續記憶體的結構,所有我們在連結串列中插入和刪除操作時時間要比在陣列中操作刪除新增速度快,

針對連結串列的插入和刪除操作可以看下圖

但是有利就有弊,在連結串列中查詢資料的時候就沒有陣列那麼快了,在陣列中可以首地址和下標可以很快查出來,因為是連續的,但是在連結串列中由於不是連續的,我們就需要根據指標節點一個一個遍歷才能查詢出需要的資料。

接下來我們看下迴圈連結串列,其實迴圈連結串列就是一種特殊的單連結串列

迴圈連結串列就是尾結點指向連結串列的頭節點,而不是指向一個空值,有點就是從連結串列尾部查詢到連結串列頭部很方便,在處理某些特殊的資料結構時很有用處。

最後我們在看下雙向連結串列

單連結串列只有一個方向,只有一個後繼指標next指向下一個節點,而雙向連結串列有兩個指標,它還有一個前驅指標,顧名思義,就是指向前一個節點的指標。

從圖中可以看出,雙向連結串列需要儲存額為一個指標,所以在儲存相同資料的情況下,雙向連結串列要比單連結串列佔用更多的記憶體空間,雖然兩個指標比較浪費儲存空間,但是可以支援雙向遍歷,帶來了更多的靈活性。

連結串列VS陣列效能大比拼

 

陣列簡單易用,在實現上用連續的記憶體,在查詢的時候cpu可以通過預讀快取提高查詢效率,而連結串列由於不是連續的所以對cpu快取不友好。

陣列確定是由於記憶體連續,所以當空間不夠時,需要再去申請一塊記憶體,然後在搬移資料,很費事,而連結串列大小沒有限制,天然的支援動態擴容,這個是和陣列最大的區別。

這兩種資料結構各有優劣,在實際開發中需要根據實際情況去選擇。

相關文章