【稀疏数组】

稀疏数组


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

1.原数组的格式
在这里插入图片描述
2.我们需要把以上的数组使用稀疏数组进行表示出来
在这里插入图片描述
3.原数组的实现

 public static void main(String[] args) {
    
    
        int [][]arrays=new int[11][11];
        arrays[1][2]=1;
        arrays[2][3]=2;
        System.out.println("输出原始数组");
        for(int [] ints :arrays){
    
    
            for ( int anInt : ints){
    
    
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

4.求有效数字的个数

int sum=0;
        for (int i = 0; i < arrays.length; i++) {
    
    
            for (int j = 0; j < arrays.length; j++) {
    
    
                if(arrays[i][j]!=0){
    
    
                    sum++;
                }
            }
        }
        System.out.println("有效数字为:"+sum);

5.创建一个稀疏数组并输出格式

 //2.创建一个稀疏数组
    int [][]array2=new int[sum+1][3];
     array2[0][0]=arrays.length;
     array2[0][1]=arrays.length;
     array2[0][2]=sum;
     //遍历二维数组,将非零的值,存放稀疏数组中
        int count=0;
        for (int i = 0; i <arrays.length ; i++) {
    
    
            for (int j = 0; j <arrays[i].length ; j++) {
    
    
                if(arrays[i][j]!=0){
    
    
                    count++;
                    array2[count][0]=i;   //第count行0列为 行坐标
                    array2[count][1]=j;   //第count行1列为 列坐标
                    array2[count][2]=arrays[i][j];   //第count行2列为 值
                }
            }
        }
        for (int i = 0; i <array2.length ; i++) {
    
    
            System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
        }

6.还原原始数组

 //还原原数组
        int array3[][]=new int[array2[0][0]][array2[0][1]];
        array3[array2[1][0]][array2[1][1]]=array2[1][2];
        array3[array2[2][0]][array2[2][1]]=array2[2][2];
        for(int []s : array3){
    
    
            for (int s1 : s){
    
    
                System.out.print(s1+"\t");
            }
            System.out.println();
        }

猜你喜欢

转载自blog.csdn.net/qq_69683957/article/details/127214400