官术网_书友最值得收藏!

1-3 數(shù)組

數(shù)組也是數(shù)據(jù)呈線性排列的一種數(shù)據(jù)結(jié)構(gòu)。與前一節(jié)中的鏈表不同,在數(shù)組中,訪問數(shù)據(jù)十分簡單,而添加和刪除數(shù)據(jù)比較耗工夫。這和1-1節(jié)中講到的姓名按拼音順序排列的電話簿類似。

參考:1-1 什么是數(shù)據(jù)結(jié)構(gòu)

01

這就是數(shù)組的概念圖。Blue、Yellow、Red作為數(shù)據(jù)存儲在數(shù)組中。

02

數(shù)據(jù)按順序存儲在內(nèi)存的連續(xù)空間內(nèi)。

03

由于數(shù)據(jù)是存儲在連續(xù)空間內(nèi)的,所以每個數(shù)據(jù)的內(nèi)存地址(在內(nèi)存上的位置)都可以通過數(shù)組下標(biāo)算出,我們也就可以借此直接訪問目標(biāo)數(shù)據(jù)(這叫作“隨機(jī)訪問”)。

04

比如現(xiàn)在我們想要訪問Red。如果使用指針就只能從頭開始查找,但在數(shù)組中,只需要指定a[2],便能直接訪問Red。

05

但是,如果想在任意位置上添加或者刪除數(shù)據(jù),數(shù)組的操作就要比鏈表復(fù)雜多了。這里我們嘗試將Green添加到第2個位置上。

06

首先,在數(shù)組的末尾確保需要增加的存儲空間。

07

為了給新數(shù)據(jù)騰出位置,要把已有數(shù)據(jù)一個個移開。首先把Red往后移。

08

然后把Yellow往后移。

09

最后在空出來的位置上寫入Green。

10

添加數(shù)據(jù)的操作就完成了。

11

反過來,如果想要刪除Green……

12

首先,刪掉目標(biāo)數(shù)據(jù)(在這里指Green)。

13

然后把后面的數(shù)據(jù)一個個往空位移。先把Yellow往前移。

14

接下來移動Red。

15

最后再刪掉多余的空間。這樣一來Green便被刪掉了。

解說

這里講解一下對數(shù)組操作所花費的運行時間。假設(shè)數(shù)組中有n個數(shù)據(jù),由于訪問數(shù)據(jù)時使用的是隨機(jī)訪問(通過下標(biāo)可計算出內(nèi)存地址),所以需要的運行時間僅為恒定的O(1)。

但另一方面,想要向數(shù)組中添加新數(shù)據(jù)時,必須把目標(biāo)位置后面的數(shù)據(jù)一個個移開。所以,如果在數(shù)組頭部添加數(shù)據(jù),就需要On)的時間。刪除操作同理。

補充說明

在鏈表和數(shù)組中,數(shù)據(jù)都是線性地排成一列。在鏈表中訪問數(shù)據(jù)較為復(fù)雜,添加和刪除數(shù)據(jù)較為簡單;而在數(shù)組中訪問數(shù)據(jù)比較簡單,添加和刪除數(shù)據(jù)卻比較復(fù)雜。

我們可以根據(jù)哪種操作較為頻繁來決定使用哪種數(shù)據(jù)結(jié)構(gòu)。

主站蜘蛛池模板: 镇坪县| 尚志市| 霍林郭勒市| 台前县| 新闻| 犍为县| 建昌县| 蒙城县| 咸丰县| 和田市| 四子王旗| 常州市| 道孚县| 南雄市| 浦北县| 尼勒克县| 台南市| 房山区| 乌兰县| 加查县| 聂荣县| 岗巴县| 铜川市| 洱源县| 隆子县| 远安县| 建瓯市| 奉贤区| 邢台县| 富蕴县| 河西区| 徐闻县| 章丘市| 泽普县| 钟山县| 句容市| 怀来县| 阳西县| 清徐县| 六安市| 禄劝|