二维数组转化为稀疏数组的思路:
>遍历二维数组,记录有效数据的总数sum
>根据总数sum可以创建稀疏数组Arr int[sum+1][3]
(稀疏数组的第一行为二维数组的行列值和有效数据的总数)
>将二维数组的有效数据存入稀疏数组
稀疏数组转化为二维数组的思路:
>读取稀疏数组的第一行,根据第一行原二维数组行列值创建二维数组
>读取稀疏数组的后几行数据,并赋给原始的二维数组
public class SparseArray {
public static void main(String[] args) {
//首先先创建一个二维数组
int arr[][] = new int[11][11];
arr[1][2] = 1;
arr[2][3] = 2;
//输出原始二维数组
System.out.println("原始数组");
for(int[] row:arr){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
/*将二维数组转化为稀疏数组
* >遍历二维数组,记录有效值总数
* >创建稀疏数组
* >给稀疏数组赋值
* */
int sum = 0;
for(int i=0;i<11;i++){
for(int j=0 ;j<11;j++){
if(arr[i][j] != 0){
sum++;
}
}
}
System.out.println("sum"+sum);
int sparseArr[][] = new int[sum+1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
int count = 0;
for(int i =0;i<11;i++){
for(int j=0;j<11;j++){
if(arr[i][j]!=0){
count++; //因为第一行已经存有二维数组的信息,因此从第二行开始
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
}
}
}
//输出稀疏数组
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]);
}
System.out.println();
/*
* 将稀疏数组转化为原始二维数组
* >读取稀疏数组第一行,创建二维数组
* >将稀疏数组后几行的值赋值给二维数组
* */
int row = sparseArr[0][0];
int col = sparseArr[0][1];
int SUM = sparseArr[0][2];
int arr1[][] = new int[row][col];
for(int i = 1;i<sparseArr.length;i++){
int x = sparseArr[i][0];
int y = sparseArr[i][1];
arr1[x][y] = sparseArr[i][2];
}
//输出该二维数组
System.out.println("输出恢复的二维数组");
for(int i = 0;i < sparseArr[0][0];i++){
for(int j = 0;j < sparseArr[0][1];j++){
System.out.printf("%d\t", arr1[i][j]);
}
System.out.println();
}
}
}