資料結構與演算法 陣列(Array)

2021-09-25 08:45:49 字數 888 閱讀 6188

@time    2019-07-18

@author ruo_xiao

@notice 64位os

1、陣列的定義

陣列是一種線性表資料結構,它用一組連續的記憶體空間來儲存一組具有相同資料型別的資料。

2、連續的記憶體空間和相同的資料型別

這種資料的組織方式,直接導致了資料具有核心特性:隨機訪問。

實現公式(定址公式)如下:

a[i]_address = a_address + i * type_size
通過上述公式,也能夠明白為什麼陣列的下標為什麼從0開始。若從1開始的話,那麼上述公式就變成了 

a[i]_address = a_address + (i - 1) * type_size
像陣列這種程式語言最底層的資料結構,效能必須優化到極致,所以採用了下標從0開始的模式。 

拓展:二維陣列的定址公式為

// 假設二位陣列為 m * n

a[i][k]_address = a_address + (i * n + k) * type_size

為了保持記憶體空間的連續性,陣列的插入和刪除是低效的,因為操作之後要進行資料遷移。

1、插入

(1 + 2 + 3 + …… + n) / n = ( n + 1 ) * n / ( 2 * n ) = (1/2)n + (1/2) = o(n)
2、刪除

其實上述操作,在 c++ 中 vector 早已封裝好,所以在 c++ 程式設計中,推薦使用vector代替陣列。當然了,那些對於效能有卓越的追求的領域,陣列還是無可替代的。

(saw:game over!)

資料結構與演算法 陣列

陣列是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。其中有幾個重要的概念 非線性表 連續的記憶體空間 儲存相同型別的資料 如圖所示,這是乙個長度為5的int陣列arr,我們假設起始的記憶體位址為1000,那麼第乙個元素的記憶體位址範圍就是 1000 1003,這是因為乙...

資料結構與演算法 陣列

題型1 如何用遞迴實現陣列求和 方法1 題型2 如何用乙個for迴圈列印乙個二維陣列 方法1 array在二維陣列中的行號和列號分別為 i maxy i maxy 題型3 用遞迴和非遞迴的方法實現二分查詢 題型4 如何在排序陣列中,找出給定數字出現的次數 方法1 二分查詢,分別找出左邊界和右邊界,左...

資料結構與演算法 陣列

陣列是由相同型別的元素 element 的集合所組成的資料結構,分配一塊連續的記憶體來儲存。利用元素的索引 index 可以計算出該元素對應的儲存位址。維基百科 陣列是線性表資料結構,定義陣列時,系統會分配乙份連續的記憶體空間來儲存一組相同的型別的資料,如int num n 陣列定義為一維陣列 二維...