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


稀疏数值的基础概念(图示)

◆当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
◆稀疏数组的处理方式是:
◆记录数组一共有几行几列,有多少个不同值
◆把具有不同值的元素和行列及值记录在-个小规模的数组中,从而缩小程序的规模
◆如上图:上边是原始数组,下边是稀疏数组

public static void main(String[] args){
        //建立一个原始二维数组
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 5;
        array1[3][4] = 9;
        
        for(int i=0;i){
            for(int j=0;j){
                System.out.print(array1[i][j]+"\t");
            }
            System.out.println();
        }
        
        System.out.println("======================================"
                + "====================================");
        
        //判断有多少个有效数值
        int sum = 0;
        for(int i=0;i){
            for(int j=0;j){
                if(array1[i][j]!=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;
        
        //count记数
        int count = 0;
        for(int i=0;i){
            for(int j=0;j){
                if(array1[i][j]!=0){
                    count++;
                    //array2[count][0] 横坐标 = i
                    //array2[count][1] 纵坐标 = j
                    //array2[count][2] 值 = array1[i][j]
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }
            }
        }
        
        for(int x[]:array2){
            for(int intX:x){
                System.out.print(intX+"\t");
            }
            System.out.println();
        }
        
        System.out.println("======================================"
                + "====================================");
        
        //还原稀疏数组
        //建立一个二维数组
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        
        for(int i=1;i){
            //array3[array2的横坐标][array2的纵坐标] = array2[i][2]
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        
        for(int x[]:array3){
            for(int intX:x){
                System.out.print(intX+"\t");
            }
            System.out.println();
        }

    }