鏈表跟數組的區別:
數組隨機訪問性強(通過下標進行快速定位),查找速度快;鏈表不能隨機查找,必須從第一個開始遍歷,查找效率低
數組插入和刪除效率低(插入和刪除需要移動數據),鏈表插入刪除速度快(因為有next指針指向其下一個節點,通過改變指針的指向可以方便的增加刪除元素)
數組浪費內存(每次創建數組之前必須規定數組的大小,靜態分配內存,大小固定),鏈表內存利用率高,不會浪費內存(可以使用內存中的不連續空間,並且可以動態括展空間)
數組利用下標定位,時間復雜度為O(1),鏈表定位元素時間復雜度O(n);
數組插入或刪除元素的時間復雜度O(n),鏈表的時間復雜度O(1)。
單鏈表和雙鏈表的區別:
單鏈表只有一個指向下一結點的指針,也就是只能next(單鏈表只能單向讀取)
雙鏈表除了有一個指向下一結點的指針外,還有一個指向前一結點的指針,可以通過prev()快速找到前一結點
1、刪除單鏈表中的某個結點時,一定要得到待刪除結點的前驅(加待刪除節點),得到該前驅有兩種方法,第一種方法是在定位待刪除結點的同時一路保存當前結點的前驅。第二種方法是在定位到待刪除結點之后,重新從單鏈表表頭開始來定位前驅。盡管通常會采用方法一。但其實這兩種方法的效率是一樣的,指針的總的移動操作都會有2*i次。而如果用雙向鏈表,則不需要定位前驅結點。因此指針總的移動操作為i次。
2、查找時也一樣,我們可以借用二分法的思路,從中間節點開始前后同時查找,這樣雙鏈表的效率可以提高一倍。
可是為什么市場上單鏈表的使用多余雙鏈表呢?
從存儲結構來看,每個雙鏈表的節點要比單鏈表的節點多一個指針(多存放一個引用),這在一些追求時間效率不高應用下並不適應,因為它占用空間比較大;這時設計者就會采用以時間換空間的做法,選取單鏈表,這時一種工程總體上的衡量。
轉載:https://blog.csdn.net/kangxidagege/article/details/80211225