數(shù)組和鏈表的區(qū)別,這個問題,不僅面試中經(jīng)常遇到,考研的同學也得掌握才行。
這兩個的區(qū)別,還得從他們在內(nèi)存里面的布局講起。
?
數(shù)組是一塊連續(xù)的內(nèi)存,這塊內(nèi)存可以在??臻g也可以在堆空間:
?
一般都會有個容量限制,比如:
int arr[5];就表示數(shù)組有 5 個元素,在內(nèi)存中占 20 個字節(jié)。
?
而且為了方便使用,數(shù)組在存儲數(shù)據(jù)的時候盡量保持連續(xù)。
?
鏈表在內(nèi)存中不用連續(xù),位置由系統(tǒng)隨機分配,所以這就需要某種機制能把各個數(shù)據(jù)串聯(lián)起來。
鏈表由一個一個結(jié)點組成,每個結(jié)點都分成數(shù)據(jù)域和指針域,指針域指向下一個結(jié)點。
這種結(jié)構(gòu)也決定了鏈表沒有容量限制,只要內(nèi)存夠用,就能保存更多的數(shù)據(jù)。
?
數(shù)組和鏈表的訪問方式也不一樣。
數(shù)組因其在內(nèi)存中連續(xù)排布,訪問的時候只要數(shù)組名加上數(shù)組下標就能精確定位到指定的元素。
?
數(shù)組名本身表示數(shù)組首元素的地址,加上下標,其實就是個偏移量,所以就訪問速度而言,數(shù)組的效率確實要高。
鏈表因為在內(nèi)存中排布不連續(xù),所以不支持這種隨機訪問。要鎖定某個結(jié)點,必須得借助指針,一步一步向下移動,結(jié)點越多,訪問的效率越低。
他倆的最大區(qū)別,還得是插入和刪除,尤其是針對開頭的插入和刪除操作。
假設都往第一個位置插入元素。
如果是數(shù)組,在空間還沒有滿的情況下,先要把后面的元素逐個向后移動,然后把第一個位置騰出來,再把新元素放進去。 所以數(shù)組里面的元素越多,插入的效率也就越低。
鏈表的插入方法完全不一樣,先來一個新結(jié)點,填上數(shù)據(jù)域和指針域,然后修改頭節(jié)點的指向關系,不管鏈表中有多少個結(jié)點,插入的步驟都是這么多。
所以在插入和刪除操作上,大部分情況下鏈表的效率要高于數(shù)組。
數(shù)組和鏈表在軟件開發(fā)中出現(xiàn)的場景很高,數(shù)組簡單,鏈表更實用。
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
數(shù)組
+關注
關注
1文章
412瀏覽量
25881 -
鏈表
+關注
關注
0文章
80瀏覽量
10539
原文標題:數(shù)組和鏈表的區(qū)別
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
C語言-鏈表(單向鏈表、雙向鏈表)
在前面章節(jié)已經(jīng)學習了數(shù)組的使用,數(shù)組的空間是連續(xù)空間,數(shù)組的大小恒定的,在很多動態(tài)數(shù)據(jù)存儲的應用場景下,使用不方便;而這篇文章介紹的鏈表結(jié)構(gòu),支持動態(tài)增加節(jié)點,釋放節(jié)點,比較適合存儲動
指針數(shù)組與數(shù)組指針及其函數(shù)指針有何區(qū)別呢
進程的五種狀態(tài)模型分別是哪些呢?指針數(shù)組與數(shù)組指針及其函數(shù)指針有何區(qū)別呢?
發(fā)表于 12-24 07:28
在RT-Thread中普通鏈表和侵入式鏈表有何區(qū)別
,這個成員變量是一個通用的鏈表結(jié)點。二者區(qū)別普通的鏈表和侵入式鏈表的區(qū)別在于普通的鏈表結(jié)點的指針
發(fā)表于 04-11 15:15
指針和數(shù)組都是C語言的精髓所在 兩者有何聯(lián)系區(qū)別
指針和數(shù)組都是C語言的精髓所在,對于很多C程序員來說,如果你問這樣一個問題:數(shù)組和指針有什么區(qū)別?他們的答案很可能是:”數(shù)組和指針不是同一樣
C語言指針和數(shù)組的區(qū)別
在C語言教程中我們使用通過數(shù)組名通過偏移和指針偏移都可以遍歷數(shù)組,那么指針和數(shù)組到底有什么區(qū)別??
C語言_鏈表總結(jié)
本篇文章介紹C語言鏈表相關知識點,涉及鏈表的創(chuàng)建、單向鏈表、循環(huán)鏈表、雙向鏈表、單向循環(huán)鏈表,
什么是柔性數(shù)組?柔性數(shù)組有何優(yōu)點
C99中,結(jié)構(gòu)體中的最后一個元素允許是未知大小的數(shù)組,這就叫作 柔性數(shù)組 。
unpacked數(shù)組和packed數(shù)組的主要區(qū)別
unpacked數(shù)組和packed數(shù)組的主要區(qū)別是unpacked數(shù)組在物理存儲時不能保證連續(xù),而packed數(shù)組則能保證在物理上連續(xù)存儲。
單鏈表和雙鏈表的區(qū)別在哪里
單鏈表和雙鏈表的區(qū)別 單鏈表的每一個節(jié)點中只有指向下一個結(jié)點的指針,不能進行回溯。 雙鏈表的每一個節(jié)點給中既有指向下一個結(jié)點的指針,也有指向
數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點
數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點? 數(shù)組和鏈表
評論