360 likes | 471 Views
| 第二章 陣列結構與矩陣. 2.1 線性串列的定義 2.2 關於陣列 2.3 一維陣列的應用 2.4 多項式應用 2.5 結論. | 線性串列資料. 2.1 線性串列的定義. 線性串列是 n 個元素的有限序列( n ≧ 0 ),可以是任何型態資料,例如英文字母:. A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U,V, W, X, Y, Z. 線性串列資料是有序的集合:. a1,a2,a3 … , an-1,an. 3. 2. 1. | 串列元素特性.
E N D
|第二章 陣列結構與矩陣 2.1 線性串列的定義 2.2 關於陣列 2.3 一維陣列的應用 2.4 多項式應用 2.5 結論
|線性串列資料 2.1 線性串列的定義 線性串列是 n 個元素的有限序列(n ≧ 0),可以是任何型態資料,例如英文字母: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U,V, W, X, Y, Z 線性串列資料是有序的集合: a1,a2,a3 … ,an-1,an 3 2 1
|串列元素特性 2.1 線性串列的定義 • 存在唯一的第一個元素。 • 存在唯一的最後一個元素。 • 除第一個元素外,每一個元素都有一個唯一的前相鄰元素。 • 除了最後一個元素之外,每一個元素都有一個唯一的後相鄰元素。
|串列運算-儲存與擷取 2.1 線性串列的定義 • 取出串列中的第 i 項; 1≦i≦n 。 • 計算串列的長度 n 。 • 由左至右,或由右至左讀取此串列。 • 加入一個新值到第 i 項,使得原來的第 i 、 i+1 … n 變為第 i+1 、 i+2 … n+1項。 • 刪除位於第i 項的一個元素,使原來的 i 、 i+1 … n 項,變成第 i-1、 i-2 …n-1 項。 • 複製串列。 • 合併串列。 • 分割串列。 • 從兩端逐一讀取串列的元素值。
|一維陣列結構 2.2 關於陣列 2.2.1 一維陣列 陣列 A[n]:索引值從 0~ n-1 A[0] A[1] A[2] A[3] A[n-1]
|宣告陣列 2.2 關於陣列 2.2.1 一維陣列 xtype xarray[len]; • xtype:陣列型態 • xarray:陣列名稱 • [len]:len 整數,表示陣列的長度
|宣告陣列 2.2 關於陣列 2.2.1 一維陣列 int A[6] ;
|陣列設值存取 2.2 關於陣列 2.2.1 一維陣列 int xarray[10] ; xarray[3] = 100 ; int x = xarray[3] ; 100 100 100 3 2 1
|陣列的初始化 2.2 關於陣列 2.2.1 一維陣列 int xarray[]={100,200,300,444,555,666} ;
|陣列的迴圈存取 2.2 關於陣列 2.2.1 一維陣列 for(i=0;i<6;i++){ /* 以 xarray[i] 存取陣列 …*/ }
|範例:陣列的讀寫 2.2 關於陣列 2.2.1 一維陣列 A:0,12,24,36,48,60, B:10.1,20.2,30.3,40.4,50.6,60.8, 5 A 0 12 24 36 48 60 4 3 B 2 1
|二維陣列定義(1) 2.2 關於陣列 2.2.2 二維陣列 xtype xtype[m][n]; • m:代表列數 • n:代表行數 • mxn 二維陣列 int myArray[3][4] ; • 3 個一維陣列 • 每個一維陣列包含 4 個元素 • 總共 3x4=12 個元素 2 1
|二維陣列定義(2) 2.2 關於陣列 2.2.2 二維陣列 int A[3][4] ; tdx[1][2]
|範例:二維陣列的讀寫 2.2 關於陣列 2.2.2 二維陣列 100 110 120 130 110 121 132 143 5 110 120 130 100 4 3 121 132 143 2 110 1
|不規則二維陣列 2.2 關於陣列 2.2.2 二維陣列 int *A[3] ; int a[6] ; b[3],c[5] A[0] 可以儲存 6 個元素 A[0] =a ; A[1] =b ; A[2] =c ; B[0] 可以儲存 3 個元素 C[0] 可以儲存 5 個元素 A[0] A[1] A[2]
|範例:不規則二維陣列讀寫 2.2 關於陣列 2.2.2 二維陣列 15 27 39 51 63 75 10 16 22 20 24 28 32 15 27 39 51 63 75 10 16 22 20 24 28 32 6 5 4 3 2 1
|三維陣列宣告 2.2 關於陣列 2.2.3 三維陣列 xtype xarray[x][y][z]; int A[2][3][5] ; A[1][1][3] 4 3 2 1
|矩陣相加 2.3 一維陣列的應用 2.3.1 矩陣相加 X[m][n] = A[m][n]+B[m][n] a0 a1 a2 w0 w1 w2 + 7 a0+w0 a1+w1 a2+w2 6 b0+x0 b1+x1 b2+x2 5 4 c0+y0 c1+y1 c2+y2 3 2 d0+z0 d1+z1 d2+z2 1
|範例:矩陣相加 2.3 一維陣列的應用 2.3.1 矩陣相加 15 24 + 15+24 35+17 4 3 12+36 23+51 2 1
|範例:矩陣相加 2.3 一維陣列的應用 2.3.1 矩陣相加 矩陣 A 和矩陣 B相加 39 52 48 74 3 2 1
|矩陣相乘 2.3 一維陣列的應用 2.3.2 矩陣相乘 1 2 3 4 5 1 2 X 3 4 12 a0*x3 + a0*x4 + a0*x0 + a0*x1 + a0*x2 + 11 a1*y4 + a1*y2 + a1*y3 + a1*y1 + a1*y0 + 1 a1*y4 + 10 a2*z3 a2*z2 a2*z1 a2*z0 9 8 2 7 6 5 3 4 3 2 4 1 1 2 3 4 5
|矩陣相乘 2.3 一維陣列的應用 2.3.2 矩陣相乘 1 2 3 4 5 1 2 X 3 4 a0*x3 + a1*y3 +a2*z3 a0*x1 + a1*y1 +a2*z1 a0*x0 + a1*y0 +a2*z0 a0*x2 + a1*y2 +a2*z2 a0*x4 + a1*y4 +a2*z4 1 b0*x3 + b1*y3 +b2*z3 b0*x1 + b1*y1 +b2*z1 b0*x0 + b1*y0 +b2*z0 b0*x2 + b1*y2 +b2*z2 b0*x4 + b1*y4 +b2*z4 2 c0*x3 + c1*y3 +c2*z3 c0*x1 + c1*y1 +c2*z1 c0*x0 + c1*y0 +c2*z0 c0*x2 + c1*y2 +c2*z2 c0*x4 + c1*y4 +c2*z4 3 3 d0*x3 + d1*y3 +d2*z3 d0*x1 + d1*y1 +d2*z1 d0*x0 + d1*y0 +d2*z0 d0*x2 + d1*y2 +d2*z2 d0*x4 + d1*y4 +d2*z4 2 4 1 1 2 3 4 5
|範例:矩陣相乘 2.3 一維陣列的應用 2.3.2 矩陣相乘 2 1 x
|範例:矩陣相乘 2.3 一維陣列的應用 2.3.2 矩陣相乘 2 1 1 1 x 4 6 * * + + * 12 15 24 30 3 2 1
|轉置矩陣轉換 2.3 一維陣列的應用 2.3.3 轉置矩陣 At[j][i]=A[i][j] 10 1 2 3 1 5 2 8 9 5 8 6 3 10 9 12 6 12 5 At A 4 3 2 1
|範例:轉置矩陣 2.3 一維陣列的應用 2.3.3 轉置矩陣 10 20 30 40 11 22 33 44 4 3 12 24 36 48 2 13 26 39 52 1
|稀疏矩陣 2.3 一維陣列的應用 2.3.4 稀疏矩陣 • 矩陣中的大部分元素為 0 。 • 無法精確辨識是否為稀疏矩陣。 • 透過矩陣儲存浪費空間。 • 以一維陣列儲存。 4 3 2 1
|儲存稀疏矩陣元素-三項式 2.3 一維陣列的應用 2.3.4 稀疏矩陣 使用三個欄位儲存矩陣元素 struct smtx { int row ; int col ; int val ; }; 4 3 2 1
|範例:稀疏矩陣 2.3 一維陣列的應用 2.3.4 稀疏矩陣 0 0 0 9 2 0 12 0 0 0 0 23 0 0 0 55 0 0 0 0 0 0 7 0 0
|魔術矩陣 2.3 一維陣列的應用 2.3.5 魔術矩陣 2 9 16 15 6 15 24 1 17 8 14 13 23 12 14 5 16 7 11 10 4 11 6 13 22 20 4 9 8 10 7 3 21 19 12 10 6 5 9 2 25 18 11 4 3 2 1
|範例:魔術矩陣 2.3 一維陣列的應用 2.3.5 魔術矩陣 15 8 1 24 17 16 14 7 5 23 22 20 13 6 4 3 21 19 12 10 9 2 25 18 11
|多項式 2.4 多項式應用 2.4.1 多項式的定義 P(x)=anXn+an-1Xn-1+…+a1+a0 aiXj(0 ≦ i ≦ n,1 ≦ j ≦ n)
|多項式的表示-線性串列 2.4 多項式應用 2.4.1 多項式的定義 不考慮是否零項次 優點:相關演算法簡單。 缺點:浪費空間 8X5+6X4+3X2+8 =>(5,8,6,0,3,0,8) 只考慮非零項次 優點:避免空間浪費。 缺點:相關演算法較為複雜。 8X5+6X4+3X2+8 =>(4,5,8,4,6,2,3,0,8)
|多項式 A(x) 與 B(x) 相加 2.4 多項式應用 2.4.2 多項式的加法運算 A 指數 =B 指數 A 指數 >B 指數 A 指數 <B 指數
|多項式相加 2.4 多項式應用 2.4.2 多項式的加法運算 A(x)=X4+5X2+2 => {3,4,1,2,5,0,2} B(x)=2X3+X2+8 => {3,3,2,2,1,0,8} X4 5X2 2 2X3 X2 8 X4 + 2X3 + 6X2 + 10
|範例:多項式相加 2.4 多項式應用 2.4.2 多項式的加法運算 A(x)=X4+5X2+2 => {3,4,1,2,5,0,2} B(x)=2X3+X2+8 => {3,3,2,2,1,0,8} 4,4,1,3,2,2,6,0,10