稀疏數(shù)組
package com.atguigu.sparsearry;
public class SparseArray {
public static void main(String[] args) {
// TODO 自動生成的方法存根
//創(chuàng)建原始數(shù)組
int chessArr1[][] = new int[11][11];
chessArr1[1] [2] = 1;
chessArr1[2] [3] = 2;
chessArr1[4] [5] = 2;
System.out.println("原始的二維數(shù)組");
for(int[] row : chessArr1) {
for(int data: row) {
System.out.printf("%d\t", data);?
}
System.out.println();
}
//遍歷二維數(shù)組,得到所有非零數(shù)據(jù)的個數(shù)
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="+sum);
//創(chuàng)建對應(yīng)的稀疏數(shù)組
int sparseArr[][]=new int [sum+1][3];
//給稀疏數(shù)組賦值
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
//遍歷二維數(shù)組,將非0值存放在sparseArray中
int count = 0;//count用于記錄第幾個非0數(shù)據(jù)
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(chessArr1[i] [j] != 0){
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr1[i] [j];
}}
}
//輸出稀疏數(shù)組的形式
System.out.println();
System.out.println("得到的稀疏數(shù)組為---");
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]);
}
System.out.println();
//將稀疏數(shù)組--》恢復(fù)成原始的二維數(shù)組
/*1.先讀取稀疏數(shù)組第一行,根據(jù)第一行數(shù)據(jù),創(chuàng)建原始的二維數(shù)組,比如上面的chessArr2=
* 2.在讀取稀疏數(shù)組后幾行的數(shù)據(jù),并賦給原始的二維數(shù)組即可
*/
//*1.先讀取稀疏數(shù)組第一行,根據(jù)第一行數(shù)據(jù),創(chuàng)建原始的二維數(shù)組
int chessArr2[][]= new int [sparseArr[0][0]][sparseArr[0][0]];
//2.在讀取稀疏數(shù)組后幾行(從第二行開始)的數(shù)據(jù),并賦給原始的二維數(shù)組即可
for(int i=1;i<sparseArr.length;i++){
chessArr2[sparseArr[i][0]][sparseArr[i][1]]= sparseArr[i][2];
}
//輸出恢復(fù)后的二維數(shù)組
System.out.println();
System.out.println("恢復(fù)后的二維數(shù)組");
for(int[] row : chessArr2) {
for(int data: row) {
System.out.printf("%d\t", data);?
}
System.out.println();
}}}
輸出結(jié)果:
原始的二維數(shù)組
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
sum=3
得到的稀疏數(shù)組為---
11 11 3
1 2 1
2 3 2
4 5 2
恢復(fù)后的二維數(shù)組
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0