java中稀疏数组的创建、打印和恢复

 介绍

稀疏数组是一种数据结构,当一个较大的数组中大量元素都是0时,可以将它压缩为稀疏数组。

  稀疏数组的格式为:

 第0列第1列第2列
第0行原数组总行数原数组总列数原数组中非0元素个数
第1行行数列数第一个非零元素
第2行行数列数第二个非零元素
第...行行数列数第..个非零元素

源码如下

//稀疏数组
public class Demo06 {
    public static void main(String[] args) {
        //声明并创建一个11*11的数组,相当于一个11*11的棋盘,两处分别落黑子和白子
        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;

        //输出棋盘,该方法中使用了for each循环语句快捷地输出了二维数组
        printTwoDimensionalArray(array);

        //下面将上面的数组压缩为稀疏数组
        int[][] array2 = generateSparseArray(array);

        //打印稀疏数组
        printTwoDimensionalArray(array2);

        //将稀疏数组还原
        int[][] array3 = restoreSparseArray(array2);

        //打印还原后的数组
        printTwoDimensionalArray(array3);
    }

    /**
     * 该方法将任何一个二维数组压缩为稀疏数组并将其返回。
     * @param array 二维数组
     */
    public static int[][] generateSparseArray(int[][] array) {
        //先判断传入的数组有几个不为0的元素
        int sum = 0;
        for (int[] ints : array) {
            for (int anInt : ints) {
                if (anInt != 0) {
                    sum++;
                }
            }
        }
        //声明并创建稀疏数组
        int[][] array2 = new int[sum + 1][3];

        //为稀疏数组按规则赋值
        array2[0][0] = array.length;
        array2[0][1] = array[0].length;
        array2[0][2] = sum;

        int temp = 1;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] != 0) {
                    array2[temp][0] = i;
                    array2[temp][1] = j;
                    array2[temp][2] = array[i][j];
                    temp++;
                }
            }
        }

        return array2;
    }

    /**
     * 该方法用于打印任何二维数组
     * @param array 二维数组
     */
    public static void printTwoDimensionalArray(int[][] array) {
        System.out.println("==================");
        for (int[] ints : array) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }

    /**
     * 该方法将传入的稀疏数组还原为正常的数组并将其返回。
     * @param array2 稀疏数组
     */
    public static int[][] restoreSparseArray(int[][] array2){
        int[][] array3 = new int[array2[0][0]][array2[0][1]];

        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }

        return array3;
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值