摘要:雖然訪問元素數組很快,而鏈接列表需要線性時間,但速度要慢得多。相反,由於存儲了額外的下一個和前一個引用元素,因此鏈接列表中需要更多內存。

數組和 鏈表 之間的主要區別在於它們的結構。數組是基於索引的數據結構,其中每個元素與索引相關聯。另一方面,鏈表 依賴於引用,其中每個節點由數據和對前一個和下一個元素的引用組成。

  • 數組是數據結構,包含類似類型數據元素的集合,而鏈表被視爲非基元數據結構,包含稱爲節點的無序鏈接元素的集合。
  • 在數組中元素屬於索引,即,如果要進入第四個元素,則必須在方括號內寫入變量名稱及其索引或位置。但是,在鏈接列表中,您必須從頭開始並一直工作,直到達到第四個元素。
  • 雖然訪問元素數組很快,而鏈接列表需要線性時間,但速度要慢得多。
  • 數組中插入和刪除等操作會佔用大量時間。另一方面,鏈接列表中這些操作的性能很快。
  • 數組具有固定大小。相比之下,鏈接列表是動態和靈活的,可以擴展和縮小其大小。
  • 在數組中,在編譯期間分配內存,而在鏈接列表中,在執行或運行時分配內存。
  • 元素連續存儲在數組中,而它隨機存儲在鏈接列表中。
  • 由於實際數據存儲在數組中的索引中,因此對內存的要求較少。相反,由於存儲了額外的下一個和前一個引用元素,因此鏈接列表中需要更多內存。
  • 此外,陣列中的內存利用效率低下。相反,內存利用率在陣列中是有效的。

圖表對比:

需要額外說明的是: 即便是排好序的數組,你用二分查找,時間複雜度也是 O(logn)。所以,正確的表述應該是,數組支持隨機訪問,根據下標隨機訪問的時間複雜度爲 O(1)

如果你的代碼對內存的使用非常苛刻,那數組就更適合你。因爲鏈表中的每個結點都需要消耗額外的存儲空間去存儲一份指向下一個結點的指針,所以內存消耗會翻倍。而且,對鏈表進行頻繁的插入、刪除操作,還會導致頻繁的內存申請和釋放,容易造成內存碎片,觸發語言本身的垃圾回收操作。

參考鏈接: difference between array and linked list

相關文章