數據結構和算法----數組

數組

  • 數組的定義

數組是一種線性表的數據結構,在內存中表現爲一組連續的存儲單元,用來存儲一組相同數據類型的數據

     線性表:數組、鏈表、隊列、棧 非線性表:樹

  • 數組的效率
  1. 低效

數組的插入和刪除操作是低效的,爲了保持數組的連續行所以在進行插入和刪除操作時要做數組進行最壞時間複雜度爲O(n)的操作。

1)、插入

      插入數據時爲了保持存儲單元的連續性,我們需要將數組中插入位置之後的所有數據都依次後移一位。

例如list = [1,2,4,5,6,7,8]

我想將3插入list[2]的位置。那麼爲了保持連續性就需要將list[2]及以後的後面的所有數據依次後移一位。最壞的時間複雜度爲On

有一個解決辦法就是將當前list[2]位置的數據放到數組最後然後將該位置數據替換爲3.時間複雜度就變爲O(1)

     2)、刪除

           同理如果刪除的話爲了保持連續性我們就需要將刪除數據的位置後面所有的數據前移一位。最壞時間複雜度同樣爲O(n)

           解決,將刪除位記錄,數組滿了之後再一起刪除之前記錄的數據

      與python 和 java 的標記清除垃圾回收機制類似。

  • 越界問題

c語言中只要不是訪問受限內存,所有內存都可以自由訪問。越界訪問會導致無限循環

java和python中會做越界檢測,如果越界就會報錯。

  • 封裝

高級的編程語言都或多或少的對數組進行了一些封裝。完善了一些操作限制例如動態擴展python 的 list ,java的ArrayList

  • 數組爲什麼從0開始

把數組的下表看作偏移量,如果從1開始技術,會多出n-1而不是從0開始的n,會增加cpu負擔。

歷史原因時因爲C語言採用的是從0開始,其他語言大都對C語言有一些借鑑

 

本文由博主學習總結而來,如果有錯誤的地方請指正。有多處借鑑!借鑑於

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzI5OTIyMjQxMA==&scene=124#wechat_redirect

https://time.geekbang.org/column/article/40961

萬分感謝馬老師和王爭大佬的知識分享!

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