無論在數值計算亦或是非數值計算,陣列均有廣泛的運用。因此,絕大多數 高階語言都將陣列設為固有資料型別,
陣列可看做普通線性表的推廣,普通陣列的各項操作都不會引起元素的插入或刪除,故陣列使用順序儲存結構。
假設每個資料元素佔l個儲存單元,則二維陣列a中任一元素a[i][j]的儲存位置可以表示為
loc(i,j)=loc(0,0)+(b2*i+j)l
loc(i,j)是a[i][j]的儲存位置,loc(0,0)是a00的儲存位置,即二維陣列a的起始儲存位置,也稱為基位址或基址。
推廣到一般情況:
loc(j1,j2,...jn)=loc(0,0,...0) +
求和公式即為n維陣列的映像函式。通過它可以得到元素在陣列中的位址。
首先是輔助巨集的定義:
#include //標準標頭檔案 ,提供巨集va_start va_arg va_end
#define ok 1
#define error 0
#define true 1
#define false 0
#define overflow -1
#define underflow -2
#define max_array_dim 8 //假設陣列維數最大是8
va_list ap;//定義ap為va_list型別 是存放變長參數列資訊的陣列
陣列的儲存結構定義:
typedef structarray;
若維數dim和各維長度合法 則建構函式相應的陣列a 並返回ok。
status initarray(array &a,int dim,...)
銷毀陣列a.
status destroyarray(array &a)
若ap指示的下標值合法 則求出該元素在a中相對位置off.
status locate(array a,va_list ap,int &off)
return ok;
}
a是n維陣列e是元素變數 隨後是n個下標值,若各下標不越界 則e賦值為所指定的a的元素值 並返回ok..
status value(array a,elemtype *e,...)
a是n維陣列 e為元素變數 隨後是n個下標值,若下標不越界 則將e的值賦給所指定的a的元素 並返回ok
status assign(array &a,elemtype e,...)
資料結構 陣列
建立陣列 大小為50 棧空間存myarray引用 堆空間存乙個大小為50,預設值為0的陣列。棧空間myarray引用指向堆空間該陣列。int myarray new int 50 public class testarray public class testarray if s intarray....
資料結構 陣列
陣列 就是相同型別的資料按一定順序排列的集合,把有限個型別相同的資料元素用乙個名字表示,通過編號來區分。名字即為陣列名,編號即為下標。陣列是最簡單 使用最廣泛的一種資料結構,其實就是一塊連續的記憶體,哪怕物理上不連續,邏輯上也是連續的,連續存放著一組相同型別資料元素。陣列的定義 type 變數名 n...
資料結構 陣列
陣列 陣列是一種佔據連續記憶體並按順序儲存資料的簡單的資料結構。建立陣列時,需要首先指定陣列的容量,然後依據大小分配記憶體。由於有時候我們需要使用陣列的容量不確定,可能開闢的記憶體遠超實際使用的記憶體,所以陣列的空間效率不好。由於陣列在記憶體中是連續的儲存空間,所以它的時間效率很高,可以在o 1 的...