前言
鏈表是一種比較簡單的數據結構,你可以在編程環境下輕鬆寫出一個鏈表,甚至生活中也有很多鏈表的提現,比如鐵鏈,文章底部的下一篇上一篇都可以稱作鏈表數據結構
描述
鏈表像鐵鏈一樣,一個鏈節點連着另一個或另兩個節點.
在計算機中,一般是每一個節點除了存儲自身的信息外,還會存儲另一個節點的內存地址,相當於鏈接到下一個節點,如下圖所示
(紅色是鏈表的節點,黑色是被其他數據佔用的內存)
可以看到鏈表可以不按照順序存,只需要指向下一個地址
特點
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條就從最後一個節點開始向前遍歷
如有錯誤或補充,請各位大佬指出,我會盡快修改