數組的定址
數組的順序存儲表示和實現-數組的定址
兩種順序映象的方式
-
以行序為主序(低下標優先)
-
以列序為主序(高下標優先)
可用下標值隨機的訪問該數組的任意一個元素。
計算數組元素存儲地址的公式稱為定址公式。
一維數組定址公式
若一維數組的下標下界為LB,上界為UB,每個元素佔用S個存儲單元,第一元素(其下標為LB)的地址為LOC(LB),下標為i的數組元素A[i]的地址為LOC(i),則計算LOC(i)的定址公式為:
\]
例1:
若一維數組a[5], 每個元素佔用4個存儲單元,第一元素(其下標為0)的地址為LOC(0) = 1000,下標為3的數組元素a[3]的地址為LOC(3),計算LOC(3)的地址:
\]
二維數組定址公式
若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從1開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素佔用S個存儲單元, 按行優先順序存放則定址公式為:
\]
若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從0開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素佔用S個存儲單元, 按行優先順序存放則定址公式為:
\]
若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從1開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素佔用S個存儲單元, 按列優先順序存放則定址公式為:
\]
若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從0開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素佔用S個存儲單元, 按列優先順序存放則定址公式為:
\]
定址 = 基址 + 所求位置前面所有元素的個數的地址
例1:
一個二維數組A,行下標的範圍是1到6,列下標的範圍是0到7,即6行8列,A[1…6] [0…7], 每個數組元素用相鄰的6個位元組存儲,存儲器按位元組編址。那麼,這個數組的體積是 ( ) 個位元組。
答:
\]
例2:
設數組a[0…59] [0…69]的基地址為2048,每個元素佔2個存儲單元,若以行序為主序順序存儲,則元素 a[32,58]的存儲地址為 ( ) a[0…59] [0…69] = a[60] [70]
答:
根據行優先公式
\]
得:
\]
例3:
二維數組A[10] [20]採用列序為主方式存儲,每個元素佔1個存儲單元,並且A[0] [0]的存儲地址是200,
則A[6] [12]的地址是( ) 。A[6] [12]: 第7行第13列
答:
根據行優先公式 (n代表總列數)
\]
得:
\]
根據列優先公式 (m代表總行數)
\]
得:
\]
例4:
二維數組A[10..20] [5..10]採用行序為主方式存儲,每個元素佔4個存儲單元,且A[10] [5]的存儲地址是 1000,則A[18] [9]的地址是 ( ) 。
分析:A[10..20] [5..10] 等價於A[0…10] [0…5]等價於A[11] [6], 11行6列,A[18] [9] 等價於A[8] [4]
根據行優先公式 (n代表總列數)
\]
得:
\]
注意
- 行序為主方式存儲就是按順序先把一行存儲滿後再換下一行,列序為主方式存儲就是按順序先把一列存儲滿後再換下一列。
- 若不是N階方陣 則按 行序 或者 列序 的定址可能不會相同