稀疏数组的相关知识

数据结构之稀疏数组

一、存储矩阵

1.先找到需要压缩存储的矩阵的总的行数和列数。

2.然后找出非0的数据个数记作sum,创造一个二维数组行数为sum+1,列为2。

3.把需要压缩的行数和列数和sum分别存入新数组的第一行的第一列,第二列,第三列。

4.分别找出非0数的行和列和它本身的数字,分别存入新数组的每行的第一列,第二列,第三列

 //创造需要存储的数组
        int char1[][] = new int[11][11];
        char1[1][1] = 1;
        char1[5][5] = 2;
        char1[6][6] = 3;
        System.out.println("原始的二维数组~~");
        for (int[] row : char1) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        //统计非0的个数
        int sum = 0;
        for (int i = 0; i < char1.length; i++) {
            for (int j = 0; j < char1[0].length; j++) {
                if (char1[i][j] != 0) {
                    sum++;
                }
            }
        }
        //创造新的二维数组存储,并存储行和列数
        int[][] char2 = new int[sum + 1][3];
        char2[0][0] = char1.length;
        char2[0][1] = char1[0].length;
        char2[0][2] = sum;
        //赋值给新的二位数组
        int count = 0;
        for (int i = 0; i < char1.length; i++) {
            for (int j = 0; j < char1[0].length; j++) {
                if (char1[i][j] != 0) {
                    count++;
                    char2[count][0] = i;
                    char2[count][1] = j;
                    char2[count][2] = char1[i][j];
                }
            }
        }

二、还原矩阵

1.读取压缩的矩阵的第一行数据,然后创造新的二维数组,第一列和第二列就是二维数组的大小

2.循环读取数据,然后分别给新二维数组赋值。

//恢复数组
        int char3[][] = new int[char2[0][0]][char2[0][1]];
        for (int i = 1; i < char2.length; i++) {

            char3[char2[i][0]][char2[i][1]] = char2[i][2];
        }
        System.out.println();
        System.out.println("恢复后的二维数组");
        for (int[] row : char3) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();


        }
    }

在这里插入图片描述

posted @ 2020-09-09 11:55  Latteitcjz  阅读(70)  评论(0)    收藏  举报