<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          什么是數(shù)組?

          共 1923字,需瀏覽 4分鐘

           ·

          2021-08-24 17:14

          大家好呀,我是蛋蛋。瞎起題目的嘴強王者,亂寫的無冕之王


          提到數(shù)組,想必臭寶們都不陌生。說不定已經昂起腦瓜抖著腿,小眼神兒斜著來一句:“就那個隨隨便便用腳趾甲就能學會的數(shù)組?”


          數(shù)組,你確定很簡單?


          自信點,語氣肯定點,數(shù)組確實很簡單。


          但是我還要講。


          當然開始之前,你要確定你先看過下面這篇:


          保姆級教學!徹底學會時間復雜度和空間復雜度


          。。。



          數(shù)組,一種基礎的的線性數(shù)據(jù)結構。不管寫什么代碼基本上都會用到數(shù)組,它也是面試中面試官喜歡提問的高頻問題。


          鑒于它勞模的身份對數(shù)組的考察基本都是考察代碼方面的問題。


          但是萬變不離其宗,解決數(shù)組方面問題的萬能鑰匙,其實就是深刻的認識數(shù)組本身的深淺



             什么是數(shù)組?


          首先什么是數(shù)組?


          數(shù)組是一種基礎的線性數(shù)據(jù)結構,它是用連續(xù)的一段內存空間,來存儲相同數(shù)據(jù)類型數(shù)據(jù)的集合。


          這里面有兩個重點:


          • 線性數(shù)據(jù)結構

          • 連續(xù)內存存儲相同數(shù)據(jù)類型


          線性數(shù)據(jù)結構


          線性數(shù)據(jù)結構,顧名思義,像線一樣的數(shù)據(jù)結構,又硬又直的典型代表。



          線性數(shù)據(jù)結構是有限的,它是某類元素的集合并且記錄著元素之間的一組順序關系,除了首尾之外,其余元素之間有且只有一個前驅和后繼


          除了數(shù)組以外,像單鏈表、棧、隊列等也是典型的線性數(shù)據(jù)結構。



          連續(xù)內存存儲的相同數(shù)據(jù)類型


          以一個長度為 6 的 int 類型的數(shù)組為例,理解一下“連續(xù)內存存儲相同數(shù)據(jù)類型”數(shù)組的樣砸。



          上圖中的計算機給數(shù)組 a 分配了一塊連續(xù)的內存空間 1000 - 1005,首地址 address[0] = 1000。


          因為連續(xù),且對于數(shù)組來說下標從 0 開始的,所有對于數(shù)組中的每個元素來說,它的內存地址就很好計算:


           address[i] = address[0] + i 




             數(shù)組的操作


          從上面可以看出,連續(xù)內存存儲使得數(shù)組有一個天然的優(yōu)勢,這個優(yōu)勢就是可以根據(jù)下標,快速的隨意訪問任意一個位置的數(shù)組元素。


          因為數(shù)組可以保證不管你訪問哪個元素,只要給出下標,只需進行一次操作,就可以定位到元素的位置,從而拿出這個位置上的值。


          這步操作的時間復雜度就是 O(1)。


          當然 God 是公平的,在查找上讓數(shù)組當了快男,那必定讓它在插入和刪除上加上“持久”技能點。


          在這你要明白,持久意味著花的時間多(低效)。這么看來,在數(shù)據(jù)結構與算法中,秒男成了褒義詞。



          這種插入和刪除的“持久”,是如何產生的呢?


          這還是要從“連續(xù)內存存儲”上找原因,真所謂快也它,慢也它。


          連續(xù)的內存使得在插入或者刪除的元素的時候,其它元素也要相應的移動。


          比如我們在下標為 2 的位置上插入一個元素 29:



          為了保持連續(xù)內存存儲在下標為 2 的位置上插入 29,原先 2 - 5 下標位置上元素都要向后一步走,可以看出這一步操作的時間復雜度為 O(n)。


          當然在這我必須要強調一點的是,插入的時間復雜度其實根據(jù)情況的不同而不同,在這里主要因為 懶 手疼,沒有都列出來,畢竟我的臭寶們是最聰明噠。


          一般我都是按照最壞情況時間復雜度來算。對于插入來說,最好的情況肯定是插在末尾,這樣所有的元素都不用動,時間復雜度為 O(1),那最壞的情況就是在數(shù)組的開頭插入,這樣所有的元素都要動,時間復雜度就成了 O(n),請大家一定要注意。



          對刪除來說,和插入操作也差不多,比如我們刪除下標為 2 位置上的元素。



          刪除了下標 2 位置上的數(shù)字 a[2], 原來下標 3 - 5 位置上的元素統(tǒng)統(tǒng)向前一步走。


          同樣對于刪除來說,最好情況是刪除末尾的元素,時間復雜度為 O(1),最壞的情況是刪除首位的元素,時間復雜度是 O(n)。


          數(shù)組的查找、插入和刪除這 3 個操作講完以后,還有最后一點提醒一下大家,在做數(shù)組類問題的時候要注意數(shù)組越界的問題。


          數(shù)組越界,簡單來說就是對于一個大小為 n 的數(shù)組,它的下標應是 0 到 n-1,對這 n 個位置的元素之外的訪問,就是非法的,這就叫做“越界”。


          比如對于下面這兩行代碼:


          lst = [1,2,3,4]print(lst[4])

          編譯一下,就會提示 IndexError : list index out of range。


          臭寶們平時寫數(shù)組的時候一定要注意,不然一不小心就 out 了。




          到這里,簡單的數(shù)組就講完啦,能忍著看到這的都是真愛呀。碼字碼的手都痛啦,點贊在看留言么么噠給我刷起來~


          我是蛋蛋,咱們下次見~


          瀏覽 74
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91插网| 婷婷六月综合 | 资源av | 91天天干视频 | 伊人啪啪网 |