基礎知識---數組和鏈表

數組的優勢:數組

  • 隨機訪問性強
  • 查找速度快
    • 數組要求是一塊連續的內存空間來存儲,這就要求在物理上這一片空間是連續的,每一個元素都有指定的索引index指向內存地址,所以查詢對時候,可根據index快速找到對應地址存儲的信息,此爲查詢快.

數組的缺點:spa

  • 插入和刪除效率低
    • 數組進行增刪的時候,就必須將目標位置後的全部元素都總體移動,所以就比較耗時,此爲增刪慢.
  • 可能浪費內存
  • 內存空間要求高,必須有足夠的連續內存空間。
  • 數組大小固定,不能動態拓展

鏈表的優勢:索引

  • 插入刪除速度快
    • 鏈表在物理上是動態地分配儲存空間,不要求連續性,可是要求邏輯上的連續。它須要存儲每一個元素在內存中的地址,以及它相鄰元素的地址,而後像鏈條同樣把各元素鏈起來,保證了在邏輯上的連續性。
      好比:
      單鏈表,每一個元素除了存儲自己的值外,還存儲了前驅的引用,也就是存儲了前驅所在的內存地址信息。
      雙鏈表就是不只存儲了前驅的引用還存儲了後繼的引用.內存

      增長元素的時候,只需給增長元素添加其前元素或後元素的地址;刪除元素的時候,修改目標元素前驅和後驅的首位鏈接地址. 故此爲增刪快。效率

  • 內存利用率高,不會浪費內存
  • 大小沒有固定,拓展很靈活。

鏈表的缺點:遍歷

  • 不能隨機查找,必須從第一個開始遍歷,查找效率低
    • 因爲沒有像數組那樣的索引,所以,查詢的時候須要遍歷整個鏈表全部元素的內存地址,而後才能肯定目標元素,此爲查詢慢。

 

內存中的存儲形式能夠分爲連續存儲和離散存儲兩種。所以,數據的物理存儲結構就有連續存儲和離散存儲兩種,它們對應了咱們一般所說的數組和鏈表。引用

由於數組是連續存儲的,在操做數組中的數據時就能夠根據離首地址的偏移量直接存取相應位置上的數據,可是若是要在數據組中任意位置上插入一個元素,就須要先把後面的元素集體向後移一位爲其空出存儲空間。鏈表

與之相反,鏈表是離散存儲的,因此在插入一個數據時只要申請一片新空間,而後將其中的鏈接關係作一個修改就能夠,可是顯然在鏈表上查找一個數據時就要逐個遍歷了。
考慮以上的總結可見,數組和鏈表各有優缺點。在具體使用時要根據具體狀況選擇。當查找數據操做比較多時最好用數組;當對數據集中的數據進行添加或刪除比較多時最好選擇鏈表。總結

 

數組就像身上編了號站成一排的人,要找第10我的很容易,根據人身上的編號很快就能找到。但插入、刪除慢,要望某個位置插入或刪除一我的時,後面的人身上的編號都要變。固然,加入或刪除的人始終末尾的也快數據

鏈表就像手牽着手站成一圈的人,要找第10我的不容易,必須從第一我的一個個數過去。但插入、刪除快。插入時只要解開兩我的的手,並從新牽上新加進來的人的手就能夠。刪除同樣的道理。

 

總結:

  • 數組靜態分配內存,鏈表動態分配內存;

  • 數組在內存中連續,鏈表不連續;

  • 數組元素在棧區,鏈表元素在堆區;

  • 數組利用下標定位,時間複雜度爲O(1),鏈表定位元素時間複雜度O(n);

  • 數組插入或刪除元素的時間複雜度O(n),鏈表的時間複雜度O(1);

相關文章
相關標籤/搜索