多維陣列和廣義表是一種複雜的非線性結構,它們的邏輯特徵是:乙個資料元素可能有多個直接前驅和多個直接後繼。
多維陣列
1、陣列(向量)——常用資料型別
一維陣列(向量)是儲存於計算機的連續儲存空間中的多個具有統一型別的資料元素。
同一陣列的不同元素通過不同的下標標識。
(a1,a2,…,an)
2、二維陣列
二維陣列amn可視為由m個行向量組成的向量,或由n個列向量組成的向量。
二維陣列中的每個元素aij既屬於第i行的行向量,又屬於第j列的列向量。
3、多維陣列
三維陣列amnp可視為以二維陣列為資料元素的向量。四維陣列可視為以三維陣列為資料元素的向量……
三維陣列中的每個元素aijk都屬於三個向量。四維陣列中的每個元素都屬於四個向量……
4、陣列的順序儲存方式
由於計算機記憶體是一維的,多維陣列的元素應排成線性序列後存人儲存器。
陣列一般不做插入和刪除操作,即結構中元素個數和元素間關係不變化。一般採用順序儲存方法表示陣列。
(1)行優先順序
將陣列元素按行向量排列,第i+1個行向量緊接在第i個行向量後面。
【例】二維陣列amn的按行優先儲存的線性序列為:
a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
注意:①pascal和c語言中,陣列按行優先順序儲存。
②行優先順序推廣到多維陣列,可規定為先排最右的下標。
(2)列優先順序
將陣列元素按列向量排列,第i+1個列向量緊接在第i個列向量後面。
【例】二維陣列amn的按列優先儲存的線性序列為:
a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
注意:①fortran語言中,陣列按列優先順序儲存。
②列優先順序推廣到多維陣列,可規定為先排最左的下標。
5、陣列元素的位址計算公式
(1)按行優先順序儲存的二維陣列amn位址計算公式
loc(aij)=loc(a11)+[(i-1)×n+j-1]×d
其中:①loc(a11)是開始結點的存放位址(即基位址)
②d為每個元素所佔的儲存單元數
③由位址計算公式可得,陣列中任一元素可通過位址公式在相同時間記憶體取。即順序儲存的陣列是隨機訪問結構。
(2)按列優先順序儲存的二維陣列amn位址計算公式
loc(aij)=loc(a11)+[(j-1)×m+i-1]×d
(3)按行優先順序儲存的三維陣列amnp位址計算公式
loc(aijk)=loc(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
(4)下界不為1的二維陣列的位址計算公式
①二維陣列a[c1..d1,c2..d2]的位址計算公式:
loc(aij)=loc(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
②下界為0的二維陣列的位址計算公式(c語言中使用)
loc(aij)=loc(a00)+[i×(d2+1)+j]×d
注意:以下討論的陣列儲存結構都以c語言下標表示。
迷糊的多維陣列的位址
為什麼要寫這個?因為這個東西有點混亂,至少我第一次接觸的時候是這樣的。或許以後還會,所以記下來需要的人一起看吧。直接上主題,我做事就是很直接,當然也會很囉嗦,下面你將會一併體驗到。int count 2 3 count 陣列count 0 0 的位址。count 1 陣列count 0 0 行數的偏...
C 位址連續的多維陣列實現
位址連續的二維陣列在c語言數值計算中有重要意義,很多二維陣列的演算法是基於一維陣列寫的。另外,在序列化時或記憶體複製時,連續空間易於進行整塊記憶體的操作。子程式說明 1 array2d和freearray2d可實現位址連續的動態二維陣列的位址分配和釋放。2 作為對照,給出了位址不連續的二維陣列位址分...
取多維陣列首位址的方法
include include int main void char a 1 1 char a 2 2 3 對一維陣列取首位址,有兩種方法 char pa a 第一種 char pa a 0 第二種 char pa a 0 0 取二維陣列首位址的方法 char pa a 0 0 0 取三維陣列首位址...