230 likes | 590 Views
資料結構設計與 C++ 程式應用 Fundamentals of Data Structures and Their Applications Using C++. 第 2 章 陣列結構. 資料結構設計與 C++ 程式應用 版權所有 禁止重製. 陣列. 『 陣列 』(Array) 是一種相當單純的資料結構,幾乎每一種程式語言均提供該結構做為資料儲存的倉庫。
E N D
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第2章 陣列結構 資料結構設計與C++程式應用 版權所有 禁止重製
陣列 • 『陣列』(Array)是一種相當單純的資料結構,幾乎每一種程式語言均提供該結構做為資料儲存的倉庫。 • ㄧ個元素可以表示成陣列名稱加上陣列索引: • 陣列名稱是用來表示ㄧ塊位置緊密相鄰的記憶體空間之起始位置。 • 陣列索引是用來表示該陣列元素究竟存在該記憶體空間位置的第幾號位置。 • 電腦系統只要根據陣列名稱和陣列索引就可以找到該陣列元素的位置,達到直接存取資料的效果。
陣列的宣告 資料型態 陣列名稱[陣列大小][陣列大小]…[陣列大小]; 資料型態 陣列名稱[陣列大小][陣列大小]…[陣列大小]={初值}; int X[10] = {73,65,52,24,83,17,35,96,41,9};
陣列的宣告 • int Y[2][3] = { {1,2,3}, // 設定第0列初值 {4,5,6}, // 設定第1列初值 };
陣列的表示法 • 一維陣列 • A[1],A[2],…,A[n] • α為陣列A的起始位置,而S為陣列元素所佔之空間大小。
陣列的表示法 • 二維陣列:A[m][n] (1)以列為主 (Row Major) (2)以行為主 (Column Major)
陣列的表示法 • 三維陣列: A[m][n][o] (1)以列為主 (Row Major) (2)以行為主 (Column Major)
陣列的表示法 • N維陣列: (1)以列為主 (Row Major) (2)以行為主 (Column Major)
陣列的表示法 • 下三角矩陣:以列為主 (Row Major),i ≧ j
陣列的表示法 • 上三角矩陣:以行為主 (Row Major), i ≦ j
陣列的表示法 • 例題1: 假設有一宣告為 float A[8][10]的浮點數陣列,則: a. 此陣列共佔多少位元組( 設 sizeof(float)=4 ) ? b. 若A[0][0]在記憶體的位址為 03C416,則元素A[0][9] 的位址為何 ? 元素A[6][5] 的位址又為何 ? 〈解析〉 a. 陣列A共佔 8×10×4 = 320 (bytes) 。 b. A[0][9] 的位址 = A[0][0] 的位址 + 9×4 = 03C416 + 36 = 03C416 + 2416 = 03E816 A[6][5] 的位址 = A[0][0] 的位址 + (6×10+5)×4 = 03C416 + 260 = 03C416 + 10416 = 04C816
一維陣列的應用 • 一. 排序 • 挑選式排序法
一維陣列的應用 • 氣泡浮昇排序法
一維陣列的應用 • 二. 搜尋 • 循序搜尋法 • 以循序搜尋法搜尋鍵值309之過程
一維陣列的應用 • 二元搜尋法
一維陣列的應用 • 標記(Marking): 電影院售票與火車售票劃位。 • 計數(Counting): A[i]=A[i]+1 • 暫存(Temporary Store) • 取代(Substitution) • 索引(Indexing):B[A[i]]=B[A[i]]+1
二維陣列的應用 • 矩陣乘積
二維陣列的應用 • 矩陣轉置 • B[j][i]=A[i][j] • 矩陣A及其轉置矩陣B
二維陣列的應用 • 反射矩陣 • 矩陣A及其反射矩陣B
二維陣列的應用 • 稀疏矩陣(Sparse Matrix) • 原矩陣為 8*8,共有 9 個非 0 元素
陣列結構習題 • 完成一程式使能輸入矩陣A={{1,2,3},{4,5,6}}並求全部元素的和。 • 若已知三維陣列 int A[8][10][5] 在記憶體中的起始位址為 03C416,且假設每個整數的大小為2 bytes,則 元素A[3][8][4] 的位址為何 ? • 假設宣告為A[-3:2]的一維陣列表示該陣列計有A[-3],A[-2], A[-1], A[0], A[1], A[2]等6個元素,則宣告為A[from:to]之陣列,其元素A[i]之位置為何?(設該陣列之起始位置為α且陣列元素大小為S) • 已知A[1][1]的記憶體位置為2,A[2][3]之記憶體位置為10, A[3][2]之記憶體位置為15,則A[5][5]之記憶體位置為何? • 設陣列A之元素大小為1,已知A[2][3]的記憶體位置為20,A[3][2]之記憶體位置為25, 則A[5][1]之記憶體位置為何? 6. 試撰寫一程式使用陣列為資料結構將下列資料以氣泡浮昇排序法排序之,並列印出排序過程中每一回合的變化情形。A[10] = {12,2,16,30,8,28,17,23,19,56}
陣列結構習題解答 • 程式略 • A[3][8][4] 的位址 = 03C416 + ( 3×10×5 + 8×5 +4 ) ×2 = 03C416 + 18416 = 054816 3. LOC(A[i]) = A的起始位址 + A[i]的索引位移 = α+( i-from )S。 6. 程式略