稀疏数组与普通二维数组的转换
今天开始更新数据结构与算法
这是数据结构的第一篇
大神可以无视,小白可以凑合看看,为了给小白看的清楚,里面加了每一步的演示,复制到ide中即可运行。
package learn;
/**
* @author yuyi
* 稀疏数组的代码实现
* 第一行记录原数组几行几列,多少个有效值
* 接下来是所在行列的位置以及值的内容
* 稀疏数组的开始也是从零开始
*/
public class Sparsearray {
/**
* 二维数组转换稀疏数组的思路
* 遍历二维数组,得到sum的值,创建稀疏数组sparseArr int[sum+1][3]
* 将二维数组的有效数字存进去
*/
//新建二维数组并赋值
public static void main(String[] args) {
int [][] array1 = new int[11][11];
array1[3][4]=5;
array1[4][7]=9;
array1[8][1]=4;
//进行展示
int sum=0;
for(int[] a:array1){
for(int num:a){
System.out.printf("%d\t",num);
}
System.out.println();
}
System.out.println("===========================");
for(int[] a:array1){
for(int num:a){
if(num !=0){
sum++;
}
}
}
System.out.println(sum);
//根据上方新建稀疏数组
int[][] array2=new int[sum+1][3];
array2[0][0]=11;
array2[0][1]=11;
array2[0][2]=sum;
int count=0;
for(int i=0;i<array1.length;i++)
for(int j=0;j<array1[0].length;j++){
if(array1[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
}
}
//展示得到的稀疏数组
for(int i=0;i<array2.length;i++){
for(int j=0;j<3;j++){
System.out.printf("%d\t",array2[i][j]);
}
System.out.println();
}
/**
* 还原为原矩阵
*/
int [][] array3 = new int[array2[0][0]][array2[0][1]];
for(int i=1;i<array2.length;i++){
array3[array2[i][0]][array2[i][1]] =array2[i][2];
}
//展示还原的数组
for(int[] a:array3){
for(int num:a){
System.out.printf("%d\t",num);
}
System.out.println();
}
}
}