一、什么是稀疏数组呢?

定义一个11*11的二维数组int[ ][ ] cherryArr=new int[11][11]
在这里插入图片描述
其中
cherryArr1[1][2]=1;
cherryArr1[2][3]=2;
cherryArr1[4][4]=5;
那么它转换为稀疏数组是什么样的呢?
在这里插入图片描述
稀疏数组一共有三列,第一列是二维数组的某个数据的行,第二列是二维数组的某个数据的列;第三列是二维数组中的某个数据;该稀疏数组第一行例外,11 11 3各代表二维数组的行、列、多少个非0数据;


二、稀疏数组有什么用呢?

在处理如五子棋这种棋盘时,使用稀疏数组保存黑子和白子的位置,可以压缩数据,节约空间的目的;


三、稀疏数组和二维数组的相互转换

1.思路
在这里插入图片描述
2.代码

/**
 * @author:抱着鱼睡觉的喵喵
 * @date:2021/1/26
 * @description:
 */

/**
 * 二维数组转稀疏数组思路:
 * 1.遍历二维数组,得到二维数组中非零的个数
 * 2.创建稀疏数组,给稀疏数组的第一行进行赋值;(0-行,1-列,2-非0数)
 * 3.遍历二维数组,给稀疏数组赋值
 */

/**
 * 稀疏数组转二维数组思路:
 * 1.根据稀疏数组的第一行数据,创建二维数组
 * 2.遍历稀疏数组,给二维数组赋值
 */
public class SpareArray {
    public static void main(String[] args) {
        //创建一个原始的二维数组 11*11,0表示没有棋子,1表示黑子,2表示蓝子
        int cherryArr1[][]=new int[11][11];
        cherryArr1[1][2]=1;
        cherryArr1[2][3]=2;
        cherryArr1[4][4]=5;
        System.out.println("二维数组如下");
        for (int[] row:cherryArr1){
            for(int item :row ){
                System.out.printf("%d\t",item);
            }
            System.out.println();
        }
        //将二维数组转稀疏数组
        //1.先遍历二维数组,得到非0数据的个数
        int num=0;
        for (int[] row:cherryArr1){
            for (int item:row){
                if (item!=0){
                    num++;
                }
            }
        }
        //创建对应的稀疏数组
        int sparseArr[][]=new int[num+1][3];
        //给稀疏数组赋值
        sparseArr[0][0]=11;
        sparseArr[0][1]=11;
        sparseArr[0][2]=num;
        //遍历二维数组,将非0的值存放到稀疏数组中
        int temp=1;
        for (int i=0;i<11;i++){
            for (int j=0;j<11;j++){
                if (cherryArr1[i][j]!=0){
                    sparseArr[temp][0]=i;
                    sparseArr[temp][1]=j;
                    sparseArr[temp][2]=cherryArr1[i][j];
                    temp++;
                }
            }
        }
        System.out.println("二维数组转为稀疏数组如下:");
       for (int i=0;i<sparseArr.length;i++){
           System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);;
       }

        //稀疏数组转二维数组
        int[][] cherryArr2=new int[sparseArr[0][0]][sparseArr[0][1]];
        for (int i=1;i<num+1;i++){
            cherryArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
        }
        System.out.println("稀疏数组转二维数组如下:");
        for (int[] row:cherryArr2){
            for (int item: row){
                System.out.printf("%d\t",item);
            }
            System.out.println();
        }
    }
}

posted on 2021-01-26 21:14  凸凸大军的一员  阅读(52)  评论(0编辑  收藏  举报