天天看点

数据结构01----稀疏数组

二维数组转稀疏数组思路:

* 1、创建一个二维数组,遍历获取有效数据的个数sum

* 2、根据sum创建稀疏数组

int[sum+1][3]

并对于第一行属性处赋值

* 3、遍历二维数组将有效数据存入稀疏数组

稀疏数组转二维数组思路:

  • 1、通过稀疏数组获取二维数组的行列值
  • 2、读取稀疏数组第二行及第二行之后的数据赋给二维数组
public class 稀疏数组 {
    public static void main(String[] args) {
      //创建一个二维数组
        int[][] Arr1 = new int[11][11];
        Arr1[1][2]=1;
        Arr1[2][3]=2;
        Arr1[4][5]=2;
        //遍历获取有效数据的个数sum
        int sum=0;
        //遍历行数i与列数i1
        for (int i = 0; i < Arr1.length; i++) {
            for (int i1 = 0; i1 < Arr1[i].length; i1++) {
                if (Arr1[i][i1]!=0){
                    sum++;
                }
            }
        }

        //根据sum创建稀疏数组
        int[][] sparseArr = new int[sum+1][3];
        //稀疏数组第0行赋值
        sparseArr[0][0]=11;
        sparseArr[0][1]=11;
        sparseArr[0][2]=sum;
        //遍历二维数组,非0值存入稀疏数组
        int count=0;
        for (int i = 0; i < Arr1.length; i++) {
            for (int i1 = 0; i1 < Arr1[i].length; i1++) {
                if (Arr1[i][i1]!=0){
                    count++;
                    sparseArr[count][0]=i;//第一列存非0值所在行数
                    sparseArr[count][1]=i1;//第二列存非0值所在列数
                    sparseArr[count][2]=Arr1[i][i1];//第三列存非0值
                }
            }
        }
        //查看稀疏数组
        for (int i = 0; i < sparseArr.length; i++) {
            for (int i1 = 0; i1 < 3; i1++) {
                System.out.print(sparseArr[i][i1]+" ");
            }
            System.out.println();
        }

        //稀疏数组转二维数组  根据稀疏数组第一行属性值创建一个二维数组
        int[][] Arr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
        //遍历稀疏数组 将有效值赋给二维数组
        for (int i = 1; i < sparseArr.length; i++) {
                Arr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
        }

        //遍历二维数组
        System.out.println("新的二维数组: ");
        for (int i = 0; i < Arr2.length; i++) {
            for (int j = 0; j < Arr2[i].length; j++) {
                System.out.print(Arr2[i][j]+" ");
            }
            System.out.println();
        }
    }
}

           

输出结果:

稀疏数组:
11 11 3 
1 2 1 
2 3 2 
4 5 2 
转换的二维数组: 
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 
           

继续阅读