Professional Documents
Culture Documents
宣告 int list[5];
陣列的元素在記憶體中是連續的位置。
list[0] 是陣列 list 的頭一個元素。
list[1] 是編號 1 號元素,它緊接著 0 號元素。同樣
的, list[i+1] 的位置是緊接著 list[i] 的。
例 2.1 有一整數陣列 int A[60]; 則此陣列
共佔多少位元組(設
sizeof(int)=2 )?
若 A[0] 在記憶體中的位址為 A[0]
03C416 ,則元素 A[20] 的位址為何? A[1]
A[2] 位
移
A 陣列共佔 60 2 = 120 (bytes) ﹋
﹋ ﹋
﹋ 量
A[20]
A[20] 的位址 = A[0] 的位址 + 位移量
﹋
﹋ ﹋
﹋
= 03C416 + (20 – 0 ) 2 A[59]
= 03C416 + 2816
= 03EC16
二維陣列在邏輯上表示為平面 實體排列順序是線性的
以列為主 以行為主
0 1 2 3 4
(row major) (column major)
0
1 19 (0,0) (0,0)
2 (0,1) (1,0)
3 25 (0,2) (2,0)
4 (0,3) (3,0)
5 (0,4) (4,0)
6 ×5 (1,0) (5,0)
(1,1) (0,1)
(1,1)
第 1 列第 2 行: List[1][2] 值
是 19 ﹋ ﹋ ﹋ ﹋
第 3 列第 1 行: List[3][1] 值 ﹋ ﹋ ﹋ ﹋
是 25 (5,3) (4,4)
(5,4) (5,4)
如果每個元素大小為 len 個 bytes ,而且 list[0][0] 的位址為 X ,則:
C3
C2 共有 C1 層
每層共有
C2 ×C3 個
C1
A[a][b][c] 的位址計算:在它之上有整整 a 層,同一層中在它之前有整整 b 列,
而同列中在它之前有 c 個元素。因此 A[a][b][c] 拉成線性相當於距離 A[0][0]
[0] 有 ( a × C2 × C3 + b × C3 + c ) 個元素
C1 C2 C3
× + ×
+
a b c
7
2-3 二維陣列及矩陣的儲存與運算
二維陣列可以用來儲存數學的矩陣及行列式,因此可以
用來解決諸如 “解連立方程組” 等線性代數問題
數學習慣表示法 資料結構示意圖
4行
a00 a01 a02 a03
a00 a01 a02 a03
3列
a10 a11 a12 a13 a10 a11 a12 a13
a20 a21 a22 a23 3 ×4 a20 a21 a22 a23
特徵: B[j][i] = A[i][j] ( 行列顛倒 )
1 2 3
1 4 7 10
A= 4 5 6
B= At = 2 5 8 11
7 8 9
3 6 9 12
10 11 12
3×4
4×3
特徵: C[i][j] = A[i][j] + B[i][j]
1 2 3 0 1 2 1 3 5
4 5 6 3 4 5 7 9 11
+ =
7 8 9 6 7 8 13 15 17
10 11 12 9 10 11 19 21 23
4×3 4×3 4×3
Am×n × Bn×t = Cm×t
b t
c00 = [a00 a01 ‧‧‧ a0(n-1) ] 00
b10
‧‧‧
b(n-1)0
= a00 × b00 + a01 × b10 + ‧‧‧ + a0(n-1) × b(n-1)0 (n 個乘法 )
n-1
= Σ a0k ×bk0
k=0
n-1
特徵: cij = Σ aik bkj
k=0