稀疏数组理解

package cs;

public class xssz {
    public static void main(String[] args) {
        //稀疏数组
        //前提: 十一行十一列  第1行第2列有个数字1  第二行第三列有个数字2(几行几列都是从零开始数)
        //创造一个二维数组   0 代表空白
         int [][]  array = new  int[11][11];
         array[1][2] =1;
         array[2][3] =2;
         //输出原始数组
        System.out.println("输出原始数组");
        for (int[] ints : array) {
            for (int ints1 : ints) {
                System.out.print(ints1+"\t");
            }
            System.out.println();
        }
        System.out.println("==============================");
        //转换为稀疏数组保存
        //获取有效个数
        int sum=0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if(array[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效个数为"+sum);
       //创建一个新的稀疏数组
        int [][] array1= new int[sum+1][3];   //sum+1  有效数+1 为稀疏数组的行数, 3 为固定的三列
        //先把系数素组第一行创建出来
        array1[0][0]=11;
        array1[0][1]=11;
        array1[0][2]=sum;
        //遍历二维数组将非0的值放进去
        int count =0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j]!=0){
                    count++;
                    array1[count][0]=i;  //第count行第一列的值    就是记录哪一行
                    array1[count][1]=j;  //第count行第二列的值    记录那一列
                    array1[count][2]=array[i][j];  //第count行第三列的值    记录这个数是几
                }
            }
        }

        System.out.println("输出稀疏数组");
        for (int i = 0; i < array1.length; i++) {
            System.out.println(array1[i][0]+"\t"+
                    array1[i][1]+"\t"+
                    array1[i][2]+"\t");
        }
        System.out.println("==============================");
        System.out.println("还原稀疏数组");
        //读取稀疏数组
        int[][]  array2 = new int[array1[0][0]][array1[0][1]];  //读取稀疏数组获得几行几列
        //还原值 遍历稀疏数组
        for (int i = 1; i < array1.length; i++) {    //i等于1  是因为稀疏数组的第一行无需读取;
            array2[array1[i][0]][array1[i][1]] =array1[i][2];  //等号左边理解为坐标 等号右边理解未值 通过具体坐标赋值
        }
        // 打印
        System.out.println("输出还原数组");
        for (int[] ints : array2) {
            for (int ints1 : ints) {
                System.out.print(ints1+"\t");
            }
            System.out.println();
        }
    }
}

posted @ 2021-03-04 15:23  仅此忆念  阅读(35)  评论(0)    收藏  举报