數組和鏈表的區別

原文地址 http://blog.csdn.net/qq_25806863/article/details/70607204
數組和鏈表是兩種基本的數據結構,他們在內存存儲上的表現不一樣,所以也有各自的特點。

大致總結一下特點和區別,拿幾個人一起去看電影時坐座位爲例。

數組的特點

  • 在內存中,數組是一塊連續的區域。 拿上面的看電影來說,這幾個人在電影院必須坐在一起。
  • 數組需要預留空間,在使用前要先申請佔內存的大小,可能會浪費內存空間。 比如看電影時,爲了保證10個人能坐在一起,必須提前訂好10個連續的位置。這樣的好處就是能保證10個人可以在一起。但是這樣的缺點是,如果來的人不夠10個,那麼剩下的位置就浪費了。如果臨時有多來了個人,那麼10個就不夠用了,這時可能需要將第11個位置上的人挪走,或者是他們11個人重新去找一個11連坐的位置,效率都很低。如果沒有找到符合要求的作爲,那麼就沒法坐了。
  • 插入數據和刪除數據效率低,插入數據時,這個位置後面的數據在內存中都要向後移。刪除數據時,這個數據後面的數據都要往前移動。 比如原來去了5個人,然後後來又去了一個人要坐在第三個位置上,那麼第三個到第五個都要往後移動一個位子,將第三個位置留給新來的人。 當這個人走了的時候,因爲他們要連在一起的,所以他後面幾個人要往前移動一個位置,把這個空位補上。
  • 隨機讀取效率很高。因爲數組是連續的,知道每一個數據的內存地址,可以直接找到給地址的數據。
  • 並且不利於擴展,數組定義的空間不夠時要重新定義數組。

鏈表的特點

  • 在內存中可以存在任何地方,不要求連續。 在電影院幾個人可以隨便坐。
  • 每一個數據都保存了下一個數據的內存地址,通過這個地址找到下一個數據。 第一個人知道第二個人的座位號,第二個人知道第三個人的座位號……
  • 增加數據和刪除數據很容易。 再來個人可以隨便坐,比如來了個人要做到第三個位置,那他只需要把自己的位置告訴第二個人,然後問第二個人拿到原來第三個人的位置就行了。其他人都不用動。
  • 查找數據時效率低,因爲不具有隨機訪問性,所以訪問某個位置的數據都要從第一個數據開始訪問,然後根據第一個數據保存的下一個數據的地址找到第二個數據,以此類推。 要找到第三個人,必須從第一個人開始問起。
  • 不指定大小,擴展方便。鏈表大小不用定義,數據隨意增刪。

各自的優缺點

數組的優點

  • 隨機訪問性強
  • 查找速度快

數組的缺點

  • 插入和刪除效率低
  • 可能浪費內存
  • 內存空間要求高,必須有足夠的連續內存空間。
  • 數組大小固定,不能動態拓展

鏈表的優點

  • 插入刪除速度快
  • 內存利用率高,不會浪費內存
  • 大小沒有固定,拓展很靈活。

鏈表的缺點

  • 不能隨機查找,必須從第一個開始遍歷,查找效率低

- 數組 鏈表
讀取 O(1) O(n)
插入 O(n) O(1)
刪除 O(n) O(1)

發佈了74 篇原創文章 · 獲贊 199 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章