二維陣列與稀疏陣列的互轉
阿新 • • 發佈:2022-04-06
二維陣列與稀疏陣列的互轉
- 轉換思路
二維陣列轉稀疏陣列的思路:
- 遍歷原始的二維陣列,得到有效資料的個數sum,根據sum就可以建立稀疏陣列sparseArr int[sum+1][3]
- 將二維陣列的有效資料存入到稀疏陣列
稀疏陣列轉原始的二維陣列的思路:
- 先讀取稀疏陣列的第一行,根據第一行的資料,建立原始的二維陣列,比如上面的chessArr2=int[11][11]
- 再讀取稀疏陣列後幾行的資料,並賦給原始的二維陣列即可
- 寫一個二維陣列:
//1.建立一個二維陣列 int chessArr1[][]=new int[11][11]; //2.給二維陣列賦值 chessArr1[1][2]=1; chessArr1[2][3]=2; //3.雙重for迴圈輸出二維陣列 System.out.println("原始的二維陣列:"); for (int[] row : chessArr1) { for (int data : row) { System.out.printf("%d\t",data); } //每輸出完一個一重陣列換一行 System.out.println(); }
- 將二維陣列換換位稀疏陣列
//將二維陣列轉稀疏陣列 //1.先遍歷二維陣列,得到非0資料的個數,知道資料個數,就可以建立稀疏陣列(知道了稀疏陣列的行) int sum=0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessArr1[i][j]!=0){ sum++; } } } System.out.println("有效值的個數為:"+sum); //2.創立對應的稀疏陣列 int sparseArr[][]=new int[sum+1][3]; //3.給稀疏陣列賦值 sparseArr[0][0]=11; sparseArr[0][1]=11; sparseArr[0][2]=sum; //4.遍歷二維陣列,給稀疏陣列 int count=0;//用於記錄是第幾行 for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (chessArr1[i][j]!=0){ sparseArr[count+1][0]=i; sparseArr[count+1][1]=j; sparseArr[count+1][2]=chessArr1[i][j]; count++; } } } //5.輸出稀疏陣列 //以下是兩種遍歷方式: /*for (int[] ints : sparseArr) { for (int anInt : ints) { System.out.printf("%d\t",anInt); } //把一個數組遍歷完之後換一行 System.out.println(); }*/ System.out.println("得到稀疏陣列為~~~~~"); for (int i = 0; i < sparseArr.length; i++) { System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]); }
- 將稀疏陣列還原為二維陣列
//把稀疏陣列還原為二維陣列 //1.建立二維陣列 int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]]; //2.給二維陣列賦值 for (int i = 1; i < sparseArr.length; i++) { chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; } //3.輸出二維陣列 for (int[] row : chessArr2) { for (int data : row) { System.out.printf("%d\t",data); } System.out.println(); }