中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

C語言經典算法 - 多維矩陣轉一維矩陣

2018-07-20    來源:open-open

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
說明
有的時候,為了運算方便或資料儲存的空間問題,使用一維陣列會比二維或多維陣列來得方便,
例如上三角矩陣、下三角矩陣或對角矩陣,使用一維陣列會比使用二維陣列來得節(jié)省空間。
解法
以二維陣列轉一維陣列為例,索引值由0開始,在由二維陣列轉一維陣列時,我們有兩種方式:
「以列(Row)為主」或「以行(Column)為主」。由于C/C++、Java等的記憶體配置方式都是
以列為主,所以您可能會比較熟悉前者(Fortran的記憶體配置方式是以行為主)。
以列為主的二維陣列要轉為一維陣列時,是將二維陣列由上往下一列一列讀入一維陣列,此時
索引的對應公式如下所示,其中row與column是二維陣列索引,loc表示對應的一維陣列索引:
loc = column + row*行數(shù)
以行為主的二維陣列要轉為一維陣列時,是將二維陣列由左往右一行一行讀入一維陣列,此時
索引的對應公式如下所示:
loc = row + column*列數(shù)
公式的推導您畫圖看看就知道了,如果是三維陣列,則公式如下所示,其中i(個數(shù)u1)、j(個
數(shù)u2)、k(個數(shù)u3)分別表示三維陣列的三個索引:
以列為主:loc = i*u2*u3 + j*u3 + k
以行為主:loc = k*u1*u2 + j*u1 + i
更高維度的可以自行依此類推,但通常更高維度的建議使用其它資料結構(例如物件包裝)會
比較具體,也不易搞錯。
在C/C++中若使用到指標時,會遇到指標運算與記憶體空間位址的處理問題,此時也是用到這
邊的公式,不過必須在每一個項上乘上資料型態(tài)的記憶體大小。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  int arr1[3][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int arr2[12] = {0};
  int row, column, i;
  printf("原二維資料:\n");
  for (row = 0; row < 3; row++)
  {
    for (column = 0; column < 4; column++)
    {
      printf("%4d", arr1[row][column]);
    }
    printf("\n");
  }
  printf("\n以列為主:");
  for (row = 0; row < 3; row++)
  {
    for (column = 0; column < 4; column++)
    {
      i = column + row * 4;
      arr2[i] = arr1[row][column];
    }
  }
  for (i = 0; i < 12; i++)
    printf("%d ", arr2[i]);
  printf("\n以行為主:");
  for (row = 0; row < 3; row++)
  {
    for (column = 0; column < 4; column++)
    {
      i = row + column * 3;
      arr2[i] = arr1[row][column];
    }
  }
  for (i = 0; i < 12; i++)
    printf("%d ", arr2[i]);
  printf("\n");
  return 0;
}

標簽:

版權申明:本站文章部分自網絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:C語言算法- 插補搜尋法

下一篇:C語言經典算法 - 上三角、下三角、對稱矩陣