稀疏数组

稀疏数组

稀疏数组就是数组中,大部分的元素值都未被使用(或都为0),在数组中仅有少 部分的空间使用。所以形成内存空间的浪费,为了解决这问题,而且不影响数组中原 有的元素值,咱们采用了一种压缩的方式来 表示稀疏数组的内容。 如图二维数组所示,有大部分的空间是无用的。 数组

在这里能够使用稀疏数组进行压缩。其中在稀疏数组中第一部分所记录的是原数组的列数和行数以及元素使用的个数、第二部分所记录的是原数组中元素的位置和内容。通过压缩以后,原来须要声明大小为63的数组,而使用压缩后,只须要声明大小为6*3的数组,仅需18个存储空间。

代码实现

将二维数组变成稀疏数组

public class SparseArray {
    private static final int row = 9;
    private static final int col = 7;
    public static void main(String[] args) {
        // 建立一个原始的二维数组
        int arr[][] = new int[row][col];
        arr[1][1]=3;
        arr[3][0]=1;
        arr[3][1]=4;
        arr[4][2]=7;
        arr[5][5]=5;
        System.out.println("输入原始二维数组-----------------");
        prt(arr);
        System.out.println("-------------------------------");

        // 将二维数组变成稀疏数组
        // 遍历获得非零数据个数
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if(arr[i][j]!=0){
                    sum++;
                }
            }
        }
        // 建立对应稀疏数组
        int sparse[][] = new int[sum+1][3];
        // 给稀疏数组赋值
        sparse[0][0] = arr.length;
        sparse[0][1] = arr[0].length;
        sparse[0][2] = sum;

        // 遍历二维数组。将非零值存放到稀疏数组
        int count =0; // 用于记录第几个非零
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if(arr[i][j]!=0){
                    count++;
                    sparse[count][0] = i;
                    sparse[count][1] = j;
                    sparse[count][2] = arr[i][j];
                }
            }
        }
        // 输出稀疏数组
        System.out.println("输出稀疏数组");
        prt(sparse);

        // 将稀疏数组还原成二维数组
        int arr2[][] =new int[sparse[0][0]][sparse[0][1]];
        for (int i = 1; i <sparse.length ; i++) {
            arr2[sparse[i][0]][sparse[i][1]] = sparse[i][2];
        }
        System.out.println("输出还原的二维数组");
        prt(arr2);
    }
    public static void prt(int [][] arr ){
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println("\n");
        }
    }
}

复制代码
相关文章
相关标签/搜索