Data Structures in C++:棧和隊列的鏈表實現

數組和鏈表的區別:
數組因爲內存連續,隨機訪問性強,可通過下標進行快速定位,查找速度快;但在插入和刪除效率低,都需要移動數據,對內存空間要求高,必須有足夠的連續內存空間。

優點 缺點
內存連續,隨機訪問性強 必須有足夠的連續的內存空間
查找速度快 插入和刪除效率低

鏈表相比數組操作更加靈活,尤其在插入和刪除上,不需要額外的數據移動,效率更高只需要改變指針的指向,不需要連續內存,利用率更高;但不能隨機查找,必須從第一個元素開始遍歷,查找效率低。

優點 缺點
不要求連續內存 查找效率低,不能隨機查找
插入和刪除的效率高 鏈接域需要佔用額外內存

單鏈表和雙鏈表的區別:

  • 單鏈表只有一個指向下一結點的指針next,只能單向讀取。
  • 雙鏈表除了next外,還有一個指向前一結點的指針prev,可以快速找到前一結點,因此查找和刪除的效率更高;但鏈接域佔用了更多的額外內存。

在這裏插入圖片描述

雙鏈表爲什麼查找和刪除的效率更高?

  1. 刪除結點時,單鏈表一定要得到待刪除結點的前驅。一種方法是在定位待刪除結點的同時一路保存當前結點的前驅;另一種方法是在定位到待刪除結點之後,從單鏈表表頭開始重新定位前驅。儘管通常會採用方法一,但它們的效率是一樣的,指針總共需要移動 2i2i 次。而雙向鏈表不需要定位前驅結點,因此刪除結點時指針只需要移動 ii 次。
  2. 查找結點時,雙鏈表可以借用二分法的思路,從head(首節點)向後查找,同時從last(尾節點)向前查找,因此效率更高。

爲什麼市場上單鏈表的使用多於雙鏈表呢?

  1. 從存儲結構來看,每個雙鏈表的節點要比單鏈表的節點多一個指針,總共需要額外 n*length的內存空間(指針length在32位系統中是4字節,在64位中是8字節)
  2. 如果不追求時間效率就會採用 以時間換空間 的做法,是一種工程總體上的衡量。

以上參考:淺談單鏈表與雙鏈表的區別

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