多維陣列的位址轉換

2021-06-26 19:41:43 字數 1636 閱讀 5182



多維陣列和廣義表是一種複雜的非線性結構,它們的邏輯特徵是:乙個資料元素可能有多個直接前驅和多個直接後繼。

多維陣列

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 取三維陣列首位址...