數據結構特性解析 (三) 鏈表

前言

鏈表是一種比較簡單的數據結構,你可以在編程環境下輕鬆寫出一個鏈表,甚至生活中也有很多鏈表的提現,比如鐵鏈,文章底部的下一篇上一篇都可以稱作鏈表數據結構

描述

鏈表像鐵鏈一樣,一個鏈節點連着另一個或另兩個節點.

在計算機中,一般是每一個節點除了存儲自身的信息外,還會存儲另一個節點的內存地址,相當於鏈接到下一個節點,如下圖所示

(紅色是鏈表的節點,黑色是被其他數據佔用的內存)

可以看到鏈表可以不按照順序存,只需要指向下一個地址

特點

1.鏈表相對於數組,內存佔用更高

上面的代碼就構成了一個簡單的鏈表結構

可以看到,類中的data字段爲存儲的數據,而爲了用鏈表存儲這個數據需要用Node這個類包裝一下,然後設置一個名爲next的內存地址指向下一個Node(節點),所以鏈表比數組多出佔用了n個對象-1的內存(數組自身也是一個對象)

2.鏈表佔用的內存可以不連續

每次創建的下一個節點都是實時分配內存的,而且因爲每個節點至少都有next來指向下一個內存地址,所以鏈表不需要連續的內存

3.鏈表的分類定義

鏈表的分類定義很簡單

只有next節點,並且尾部的next爲null(不指向第一個節點)的稱爲單向不循環鏈表

有next節點,也有prev(上一個)節點,並且尾部的next爲null的稱爲雙向不循環列表

而尾部指向第一個節點的稱爲單向循環鏈表或者雙向循環鏈表

且某個節點的next(或prev)鏈接到了比它靠前的節點,稱爲死循環鏈表(是一種錯誤現象)

4.鏈表插入和刪除比較快

鏈表的插入和刪除只需要修改其前後節點的地址,就可以添加或刪除

插入的圖示(修改next指向的地址):

  ->  

移除的圖示(修改next指向的地址):

  ->  

 

5.鏈表遍歷比較慢

鏈表因爲無法直接尋址,所以查詢是需要通過遍歷的

而雙向鏈表在有算法支持下通常比單向鏈表更快,但佔用稍多內存(每個節點多了一個地址引用)

比如一共10條,我取第3條,就從第一個節點開始向後遍歷獲取數據,而取第8條就從最後一個節點開始向前遍歷

 

如有錯誤或補充,請各位大佬指出,我會盡快修改

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章