數組和鏈表的區別,這個問題,不僅面試中經常遇到,考研的同學也得掌握才行。
這兩個的區別,還得從他們在內存里面的布局講起。
?
數組是一塊連續的內存,這塊內存可以在棧空間也可以在堆空間:
?
一般都會有個容量限制,比如:
int arr[5];就表示數組有 5 個元素,在內存中占 20 個字節。
?
而且為了方便使用,數組在存儲數據的時候盡量保持連續。
?
鏈表在內存中不用連續,位置由系統隨機分配,所以這就需要某種機制能把各個數據串聯起來。
鏈表由一個一個結點組成,每個結點都分成數據域和指針域,指針域指向下一個結點。
這種結構也決定了鏈表沒有容量限制,只要內存夠用,就能保存更多的數據。
?
數組和鏈表的訪問方式也不一樣。
數組因其在內存中連續排布,訪問的時候只要數組名加上數組下標就能精確定位到指定的元素。
?
數組名本身表示數組首元素的地址,加上下標,其實就是個偏移量,所以就訪問速度而言,數組的效率確實要高。
鏈表因為在內存中排布不連續,所以不支持這種隨機訪問。要鎖定某個結點,必須得借助指針,一步一步向下移動,結點越多,訪問的效率越低。
他倆的最大區別,還得是插入和刪除,尤其是針對開頭的插入和刪除操作。
假設都往第一個位置插入元素。
如果是數組,在空間還沒有滿的情況下,先要把后面的元素逐個向后移動,然后把第一個位置騰出來,再把新元素放進去。 所以數組里面的元素越多,插入的效率也就越低。
鏈表的插入方法完全不一樣,先來一個新結點,填上數據域和指針域,然后修改頭節點的指向關系,不管鏈表中有多少個結點,插入的步驟都是這么多。
所以在插入和刪除操作上,大部分情況下鏈表的效率要高于數組。
數組和鏈表在軟件開發中出現的場景很高,數組簡單,鏈表更實用。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
數組
+關注
關注
1文章
417瀏覽量
25979 -
鏈表
+關注
關注
0文章
80瀏覽量
10572
原文標題:數組和鏈表的區別
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言-鏈表(單向鏈表、雙向鏈表)
在前面章節已經學習了數組的使用,數組的空間是連續空間,數組的大小恒定的,在很多動態數據存儲的應用場景下,使用不方便;而這篇文章介紹的鏈表結構,支持動態增加節點,釋放節點,比較適合存儲動
unpacked數組和packed數組的主要區別
unpacked數組和packed數組的主要區別是unpacked數組在物理存儲時不能保證連續,而packed數組則能保證在物理上連續存儲。
評論