數據結構-鏈表

數組須要一塊連續的內存用來存儲數據,而鏈表偏偏相反,它並不須要一塊連續的內存,它經過指針將不連續的內存塊串起來。數組

鏈表結構不少,咱們說下最多見的,單鏈表,雙向鏈表和循環鏈表。緩存

咱們先看比較簡單的單鏈表數據結構

 

如上圖能夠看出來,圖中的每一個節點不只須要存儲數據,還須要記錄一個指向下一個節點的指針,如圖所示,咱們把記錄下一個節點的指針叫作後繼指針 next性能

圖中有兩個節點比較特殊第一個節點咱們叫作頭節點,最後一個節點咱們叫作尾結點,頭節點記錄了這個鏈表的基地址,尾節點的指針不是指向一個節點,而是指向一個空地址NULL。spa

咱們知道在數組的插入和刪除操做後,爲了保持連續內存的特色須要搬移大量數據,而在鏈表中咱們不須要保持連續內存的結構,全部咱們在鏈表中插入和刪除操做時時間要比在數組中操做刪除添加速度快,指針

針對鏈表的插入和刪除操做能夠看下圖blog

可是有利就有弊,在鏈表中查詢數據的時候就沒有數組那麼快了,在數組中能夠首地址和下標能夠很快查出來,由於是連續的,可是在鏈表中因爲不是連續的,咱們就須要根據指針節點一個一個遍歷才能查詢出須要的數據。內存

接下來咱們看下循環鏈表,其實循環鏈表就是一種特殊的單鏈表開發

循環鏈表就是尾結點指向鏈表的頭節點,而不是指向一個空值,有點就是從鏈表尾部查詢到鏈表頭部很方便,在處理某些特殊的數據結構時頗有用處。效率

最後咱們在看下雙向鏈表

單鏈表只有一個方向,只有一個後繼指針next指向下一個節點,而雙向鏈表有兩個指針,它還有一個前驅指針,顧名思義,就是指向前一個節點的指針。

從圖中能夠看出,雙向鏈表須要存儲額爲一個指針,因此在存儲相同數據的狀況下,雙向鏈表要比單鏈表佔用更多的內存空間,雖然兩個指針比較浪費存儲空間,可是能夠支持雙向遍歷,帶來了更多的靈活性。

鏈表VS數組性能大比拼

 

數組簡單易用,在實現上用連續的內存,在查詢的時候cpu能夠經過預讀緩存提升查詢效率,而鏈表因爲不是連續的因此對cpu緩存不友好。

數組肯定是因爲內存連續,因此當空間不夠時,須要再去申請一塊內存,而後在搬移數據,很費事,而鏈表大小沒有限制,自然的支持動態擴容,這個是和數組最大的區別。

這兩種數據結構各有優劣,在實際開發中須要根據實際狀況去選擇。

相關文章
相關標籤/搜索