數(shù)組
數(shù)組(Array)是一種線性表數(shù)據(jù)結(jié)構(gòu)茄蚯。它用一組連續(xù)的內(nèi)存空間,來存儲一組具有相同類型的數(shù)據(jù)留凭。
缺點:插入刪除復(fù)雜岁钓,必須要連續(xù)空間
優(yōu)點:隨機訪問高效升略,可以利用CPU 的緩存機制
幾個關(guān)鍵詞
線性表:
數(shù)據(jù)排成像一條線一樣的結(jié)構(gòu)。每個線性表上的數(shù)據(jù)最多只有前和后兩個方向屡限。
非線性表:
非線性表中品嚣,數(shù)據(jù)之間并不是簡單的前后關(guān)系。
連續(xù)的內(nèi)存空間和相同類型:
- 可以實現(xiàn)隨機訪問
- 刪除钧大,插入低效
- 必須是連續(xù)的內(nèi)存
隨機存群渤拧:
指的是當(dāng)存儲器中的消息被讀取或?qū)懭霑r,所需要的時間與這段信息所在的位置無關(guān)啊央。相對的眶诈,讀取或?qū)懭腠樞蛟L問(SequentialAccess)存儲設(shè)備中的信息時,其所需要的時間與位置就會有關(guān)系(如磁帶)瓜饥。
數(shù)據(jù)實現(xiàn)隨機訪問示例:
擴(kuò)展:為什么大多數(shù)編程語言中逝撬,數(shù)組要從 0 開始編號,而不是從 1開始呢乓土?
從數(shù)組存儲的內(nèi)存模型上來看宪潮,“下標(biāo)”最確切的定義應(yīng)該是“偏移(offset)”。前面也講到趣苏,如果用 a 來表示數(shù)組的首地址狡相,a[k] 就表示偏移 k 個 type_size 的位置,所以計算 a[k] 的內(nèi)存地址只需要用這個公式:
a[k]_address = base_address + k * type_size
但是如果偏移從1開始
a[k]_address = base_address + (k-1)*type_size
歷史原因:
C 語言設(shè)計者用 0 開始計數(shù)數(shù)組下標(biāo)拦键,之后的 Java谣光、JavaScript 等高級語言都效仿了 C 語言檩淋,或者說芬为,為了在一定程度上減少 C 語言程序員學(xué)習(xí) Java 的學(xué)習(xí)成本萄金,因此繼續(xù)沿用了從 0 開始計數(shù)的習(xí)慣。實際上媚朦,很多語言中數(shù)組也并不是從 0 開始計數(shù)的氧敢,比如 Matlab。甚至還有一些語言支持負(fù)數(shù)下標(biāo)询张,比如 Python孙乖。
引用:
https://baike.baidu.com/item/%E9%9A%8F%E6%9C%BA%E5%AD%98%E5%8F%96