回覆列表
-
1 # 大巖不燦
-
2 # 居家程式設計師
說到這兩者,想起久遠的資料結構課上聽講過,查詢陣列快,插入連結串列快。
先來說一下陣列這位老朋友:
1、陣列在記憶體中是一塊連續的區域,意味著陣列在建立的時候就需要指定空間大小,提前預留空間,這裡會表現出陣列的一個缺點,那就是由於我們需要在使用前就提取申請記憶體空間,如果在不知道需要的空間大小時,這種預先申請會導致浪費記憶體空間,即陣列空間利用率低。
2、提取申請的記憶體空間不足時,需要進行擴容,該操作將需要把舊陣列中的所有元素向新陣列中移動。
3、陣列在插入資料時,待插入位置的的元素和它後面的所有元素都需要向後移動;而在
4、由於陣列一開始就申請了記憶體空間,陣列的記憶體是連續的,也就是說想要訪問哪一個元素,直接從陣列的首地址處向後查詢就可以訪問到了,也就是常說的隨機訪問效率很高(有學問的感覺的說法就是:時間複雜度可以達到O(1))。
隨後來說一下另一位老朋友,連結串列:
1、連結串列同樣處在記憶體中,不過它各個元素的空間可以分散在任意地方,不需要連續。
3、連結串列中的元素除了元素的內容外,還存在一個特殊屬性:指標,用於標記下一個元素的地址,也就是說每個元素都會透過指標來儲存下一個資料的記憶體的地址,在查詢的時候可以透過此地址可以找到下一個資料。
4、由於記憶體空間分散不連續,所以訪問的時候不具有隨機訪問性,當我們需要訪問某個位置的資料,就需要從第一個資料開始,逐個查詢下一個資料,直到找到待查詢的位置,也就是說查詢資料時效率低(有學問的感覺的說法就是:時間複雜度為O(N))。
根據兩者的介紹,綜合來說:
連結串列的:
缺點:浪費空間需要額外空間儲存前後節點的指標,根據下標獲取元素慢。
陣列:
優點:根據下標查詢快,佔用記憶體緊湊