2020-08-21

稀疏数组的用法

稀疏数组:当一个数组中大部分的元素为0,或者为同一值的数组时,可以采用稀疏数组来保存该数组。通常情况下,我们在棋盘或地图等,会采取该方法存储我们的数据。

稀疏数组对该数组的处理方法为: (1)记录数组一共有几行几列,记录有多少个不相同的值 (2)把具有不同值的元素的行列还有值记录在一个相对于较小规模的数组中,从而缩小程序的规模,达到方便存储的作用。

以下为图示:

在这里插入图片描述

原数组:

					0	0	0	0	0	0	0	0	0	0		
					0	0	1	2	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0		
					0	0	0	0	0	0	0	0	0	0	

稀疏数组为:

		10		10		2	
		1		2		1	
		1		3		2

实现方法:

public class Test2 {
    public static void main(String[] args) {
        //声明一个二维数组来存放棋子
        int[][] chessArr1 = new int[10][10];
        //0代表的是没有棋子,1代表的是黑棋、2代表的是蓝棋
        chessArr1[1][2] = 1;
        chessArr1[1][3] = 2;
        //输出原始数组
        for (int[] row: chessArr1) {
            for (int data: row) {
                System.out.print(data+"\t");
            }
            System.out.println();
        }
        //------------------------------
        //将二维数组转换为稀疏数组
        //先遍历二维数组得到非0的个数为多少
        int sum = 0;
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                if (chessArr1[i][j] != 0)
                    sum++;
            }
        }
        //检验sum是否有误
        // System.out.println(sum);

        //创建稀疏数组
        int[][] sparseArr = new int[sum + 1][3];
        //初始化稀疏数组
        sparseArr[0][0] = 10;
        sparseArr[0][1] = 10;
        sparseArr[0][2] = sum;
        //遍历二维数组,把非0的值放入稀疏数组中
        int count = 0;//记录第几个非0的数据
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                if (chessArr1[i][j]!=0)
                {
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                }
            }
        }
        System.out.println("-------------------------");
        System.out.println("稀疏数组为:");
        for (int i = 0; i < sparseArr.length; i++) {
            System.out.println(sparseArr[i][0] + "\t" + sparseArr[i][1] + "\t" + sparseArr[i][2] + "\t");
        }

        //以稀疏数组,输出原来数组的格式:
        int row = sparseArr[0][0];//初始化原数组的行变量
        int column = sparseArr[0][1];//初始化原数组的列变量
        int[][] chessArr2 = new int[row][column];//创建二维数组
        //把稀疏数组的值放回原数组上
        for (int i = 1; i < sparseArr.length; i++) {
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        System.out.println("-------------------------");
        System.out.println("将稀疏数组转为原有的格式:");
        for (int[] row1: chessArr2) {
            for (int data2:row1) {
                System.out.print(data2 + "\t");
            }
            System.out.println();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/zzFZJ_/article/details/108148950