如有引用參考請詳註出處,感謝
密集串列
,它是一種有序串列
的資料使用連續記憶體空間優點 : 找查記憶體十分快速
缺點 : 對於拓展空間、插入資料很浪廢資源,需要移動大量資料
陣列是電腦儲存資料的方式是一維
電腦儲存的 index 是從 0 開始
數學儲存的 index 是從 1 開始
而數學的二維表達方式是使用矩陣,而電腦儲存二維的方式是透過一維的拓展
也就是說實際電腦記憶體中無法以矩陣分是儲存,就以線性方是在電腦儲存,可視為一維矩陣的延伸處理電腦儲存的 index 是從 (0,0) 開始
數學儲存的 index 是從 (1,1) 開始
宣告一個,不固定長度的陣列–>初始化
宣告一個,固定長度的陣列–>不初始化
選告一個,固定長度的陣列–>初始化
第一個: 未定義矩陣長度的陣列,長度預設是一個,也就是 4 byte
第二個: 原本計算出的大小應該是 7 byte,但答案是 8 byte
struct 會依照目前內部最大的空間作為倍數,做數據對齊
但 Java 宣告陣列不需要提供陣列的大小,陣列的大小在初始化時自動決定
–實作–
int[10] a = {0}, a[0] addr is 0x0010, a[5] addr 為多少 ?
Ans : 由於 a[5] 是電腦陣列表達式,數學表達式是 a(5+1) 的地方,也就是 a5
// 以下計算使用數學式計算0x0010 + (6 - 1)(行) * 4(byte) = 0x0010 + 20
0x0010 + 0x0014
0x0024
一維陣列可不必定義大小,但二維的陣列一定要定義大小(不然不知道何時換行)
未定義預設一維就是 1, 4(byte) * 1 * 5 = 20
定義預設一維就是 5, 4(byte) * 5 * 5 = 100
struct array -> 8 (struct 大小, 單位 byte) * 10 * 5 = 400
但 Java 宣告陣列不需要提供陣列的大小,一維、二維陣列的大小在初始化時自動決定
testClassArray.length 是指向外層(二圍)的長度
testClassArray[0].length 是指內層(一維)的長度
–實作–
int[10][5] a = {0}, a[0][0] addr is 0x0010, a[3][2] addr 為多少 ?
Ans : 由於 a[3][5] 是電腦陣列表達式,數學表達式是 a(3+1)(2+1) 的地方,也就是 a42(矩陣)
// 以下計算使用數學式計算0x0010 + ((4 - 1)(列) * 5(行) + (2 - 1)(行)) * 4(byte)= 0x0010 + (15 + 1) * 4
0x0010 + 0x0040
0x0050
一維陣列可不必定義大小,但二維、三維的陣列一定要定義大小
未定義預設一維就是 1, 4(byte) * 1 * 5 * 2= 40
定義預設一維就是 5, 4(byte) * 1 * 5 * 2= 200
struct = 8 * 10 * 5 * 2 = 800
但 Java 宣告陣列不需要提供陣列的大小,一維、二維、三維陣列的大小在初始化時自動決定
testClassArray.length 是指向最外面一層(三圍)的長度
testClassArray[0].length 是指第二層(二維)的長度
testClassArray[0][0].length 是指最內層(一維)的長度
–實作–
int[10][5][10] a = {0}, a[0][0][0] addr is 0x0010, a[3][2][7] addr 為多少 ?
Ans : 由於 a[3][5][8] 是電腦陣列表達式,數學表達式是 a(3+1)(2+1)(8+1) 的地方,也就是 a429(矩陣)
// 以下計算使用數學式計算0x0010 + ((4 - 1)(列) * 5(行) * 10(高)+ (2 - 1)(行) * 10(高) + (9 - 1)(高)) * 4(byte)= 0x0010 + (150 + 10 + 8) * 4
0x0010 + 0x02A0
0x02B0
相加矩陣的行列必須相等
–實作–
以 (3*2) * (2*4) = (3*4) 的矩陣
[{1,1}, {2,2}, {3,3}] * [{4,4,4,4}, {1,2,3,4}][
{(1*4 + 1*1), (1*4 + 1*2), (1*4 + 1*3), (1*4 + 1*4)},
{(2*4 + 2*1), (2*4 + 2*2), (2*4 + 2*3), (2*4 + 2*4)},
{(3*4 + 3*1), (3*4 + 3*2), (3*4 + 3*3), (3*4 + 3*4)},
]結果: 3*4 的矩陣
[5, 6, 7, 8
10, 12, 14, 16
15, 18, 21, 24]
–實作–
–實作–
A(0,1) 該矩陣的列數
A(0,2) 該矩陣的行數
A(0,3) 該矩陣的非零項目的總數
index | 1 | 2 | 3 |
---|---|---|---|
0 | 6(總列數) | 6(總行數) | 8(總非零數) |
1 | 列 | 行 | 數值 |
2 | 列 | 行 | 數值 |
3 | 列 | 行 | 數值 |
–實作–
三角矩陣又分為,右上、左上、右下、左下三角矩陣,除了三角區域以外都是0元素
我們可以把三角矩陣的二維模式透過一維的陣列存取,目的為了壓縮矩陣大小,節省空間
透過呼叫原矩陣座標在一維陣列中取出儲存值
Item 總數公式n*(n+1)/2
(正三角)
n*(i-1) : 算出 A2-3 以上的面積
(i * (i-1))/2 : 扣除矩陣中 0 的項目(0 不放入一維陣列中儲存)
j : 加上位移的座標
**–實作
(i * (i-1))/2 : 非 0 的項目(0 不放入一維陣列中儲存)
j : 加上位移的座標
**–實作
資料結構