下面使用Java来实现将一个基本二维数组转化为稀疏数组,再将稀疏数组还原为一个基本二维数组。从中体现稀疏数组的作用和使用方式。
首先建立一个12*12的基本二维数组并存入一些元素
1 int[][] arr1=new int[11][11]; 2 arr1[1][2]=1; 3 arr1[2][3]=2; 4 arr1[4][5]=2;
遍历输出数组看一下
1 for(int[] temp:arr1){ 2 for(int item:temp) { 3 System.out.print(item+"\t"); 4 } 5 System.out.println(); 6 }
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
下面遍历基本数组,得到基本数组的基本信息(非零元素总数)
int sum=0;//元素总数 for(int i=0;i<11;i++) { for(int j=0;j<11;j++) { if(arr1[i][j]==0) { continue; }else { sum++; }
}
}
创建稀疏数组并存入基本信息
1 int[][] sparseArr=new int[sum+1][3]; 2 sparseArr[0][0]=11; 3 sparseArr[0][1]=11; 4 sparseArr[0][2]=sum;
遍历存入非零元素
1 int hang=0; 2 int lie=0; 3 for(int i=0;i<11;i++) { 4 for(int j=0;j<11;j++) { 5 if(arr1[i][j]==0) { 6 continue; 7 }else { 8 hang++; 9 sparseArr[hang][lie]=i; 10 sparseArr[hang][lie+1]=j; 11 sparseArr[hang][lie+2]=arr1[i][j]; 12 } 13 } 14 }
打印一下填充好的稀疏数组看看效果
1 for(int[] temp:sparseArr) { 2 for(int item:temp) { 3 System.out.print(item+"\t"); 4 } 5 System.out.println(); 6 }
11 11 3 1 2 1 2 3 2 4 5 2
可以看出第一行存放着基本数据,行数、列数、需要存放的元素数
后三行存放着形式为(行数、列数、元素值)的的三组数据
接下来将稀疏数组转化为二维基本数组
创建二维数组,代入基本数据,遍历输入特定位置的元素
1 int[][] arr2=new int [sparseArr[0][0]][sparseArr[0][1]]; 2 for(int i=1;i<hang+1;i++) { 3 arr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; 4 }
遍历打印基础数组
1 for(int[] temp:arr2) { 2 for(int item:temp) { 3 System.out.print(item+"\t"); 4 } 5 System.out.println(); 6 }
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
原文:https://www.cnblogs.com/hbc314/p/12156701.html