2-3 阵列的定址方式.pptVIP

  • 1
  • 0
  • 约4.38千字
  • 约 29页
  • 2017-09-02 发布于天津
  • 举报
2-3 阵列的定址方式

資料結構 第2章 陣列 2-1 認識陣列 2-1-1 一維陣列 int A[3] = {10, 20, 30}; 2-1-2 二維陣列 2-1-3 三維陣列 2-2 陣列的運算 一維陣列常見的運算 建立 (create) 讀取 (retrieve) 寫入 (store) 插入 (insert) 刪除 (delete) 複製 (copy) 搜尋 (search) 走訪 (traverse) 範例2.1:撰寫一個函數實作一維陣列的 [走訪] 運算並分析其時間複雜度。 array_traverse(int A[], int n) { int i; for(i = 0; i n; i++) printf(%d\n, A[i]); } main() { int A[5] = {10, 20, 30, 40, 50}; array_traverse(A, 5); } 二維陣列常見的運算 矩陣轉置 (matrix transposition) A = B = At = 例如: 矩陣相加 (matrix addition) 矩陣相乘 (matrix multiplication) 範例2.4: [矩陣走訪] 撰寫一個函數印出矩陣的所有元素並分析其時間複雜度。 matrix_traverse(int m, int n, int A[m][n]) { int i, j; for(i = 0; i m; i++){ for(j = 0; j n; j++) printf(%d , A[i][j]); printf(\n); } } main() { int A[2][3] = {{11, 12, 13}, {21, 22, 23}}; matrix_traverse(2, 3, A); } 2-3 陣列的定址方式 一維陣列的定址方式 我們根據以列為主來討論一維陣列A[upper0] 的定址方式,假設第一個元素A[0] 的位址為α,則元素A[i] 的位址為α + i x length。 二維陣列的定址方式 我們根據以列為主來討論二維陣列A[upper0][upper1] 的定址方式,假設第一個元素A[0][0] 的位址為α,則元素A[i][0] 的位址為α + i x upper1 ,元素A[i][j] 的位址為α + i x upper1 + j 。 範例2.7:假設以C語言宣告一個浮點數陣列float A[7][8]; (已知sizeof(float) 等於4),若元素A[3][4] 在記憶體空間的位址為100,則元素A[5][6] 的位址為何?而元素A[2][3] 的位址又為何? 解答: A[5][6] 的位址 = A[3][4] 的位址 + 位移量 = 100 + ((5 x 8 + 6) - (3 x 8 + 4)) x 4 = 172 A[2][3] 的位址 = A[3][4] 的位址 + 位移量 = 100 + ((2 x 8 + 3) - (3 x 8 + 4)) x 4 = 64 三維陣列的定址方式 我們根據以列為主來討論三維陣列A[upper0][upper1][upper2] 的定址方式,假設第一個元素A[0][0][0] 的位址為α,則元素A[i][0][0] 的位址為α + i x upper1 x upper2,元素A[i][j][0] 的位址為α + i x upper1 x upper2 + j x upper2,元素A[i][j][k] 的位址為α + i x upper1 x upper2 + j x upper2 + k 。 範例2.10:假設以C語言宣告一個浮點數陣列float A[6][7][8]; (已知sizeof(float) 等於4),若元素A[3][4][5] 在記憶體空間的位址為1000,則元素A[1][2][3] 的位址為何? 解答: 1000 + ((1 x 7 x 8 + 2 x 8 + 3) - (3 x 7 x 8 + 4 x 8 + 5)) x 4 = 480 n維陣列的定址方式 我們根據以列為主來討論n維陣列A[upper0][upper1] …[uppern-1] 的定址方式,假設第一個元素A[0][0]…[0] 的位址為α,則元素A[i0][0]…[0] 的位址為: α + i0 x

文档评论(0)

1亿VIP精品文档

相关文档