稀疏数组

    科技2022-07-11  90

    文章目录

    稀疏 sparsearray 数组先看一个实际的需求基本介绍应用实例

    稀疏 sparsearray 数组

    先看一个实际的需求

    编写的五子棋程序中,有存盘退出和续上盘的功能。

    分析问题: 因为该二维数组的很多值是默认值 0, 因此记录了很多没有意义的数据.->稀疏数组

    基本介绍

    当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是:

    记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

    稀疏数组举例说明

    应用实例

    使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)把稀疏数组存盘,并且可以从新恢复原来的二维数组数整体思路分析

    4. 代码实现

    package com.huan.sparsearray; /** * 1.创建一个原始的二维数组 11*11 * 2.0:表示没有棋子,1表示黑子,2表示白子 */ public class SparseArray { public static void main(String[] args) { //1.创建一个原始的二维数组 11*11 int chessArr1[][] = new int[11][11]; //2.0:表示没有棋子,1表示黑子,2表示白子 chessArr1[1][2] = 1; chessArr1[2][3] = 2; //输出原始的二维数组 System.out.println("原始二维数组!!!"); for (int[] row : chessArr1) { for (int data : row) { System.out.printf("%d\t",data); } System.out.println(); } //将二维数组 转 稀疏数字的思路 //1.先遍历二维数组,得到非0数据的个数 int sum = 0; for(int i = 0; i < chessArr1.length; i++){ for (int j = 0; j < chessArr1.length; j++) { //如果选中的I 和 J不等于0 则输出 if (chessArr1[i][j] != 0){ sum++; } } } //System.out.println("sum="+sum); //2 //创建对应的稀疏数组 int sparseArr[][] = new int[sum+1][3]; //给稀疏数组赋值 sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = sum; //遍历二维数组,将非0的值存放到sparseArr中 int count = 0 ; //count 用于记录是第几个非零数据 for (int i = 0; i < chessArr1.length; i++) { for (int j = 0; j < chessArr1.length; 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.printf( "%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2] ); } System.out.println(); //TODO 将稀疏数组 -->> 恢复成原始的二维数组 //1.先读取稀疏数据的第一行,根据第一行的内容,创建原始的二维数组 int chessArr2[][] = new int[sparseArr[0][0]][ sparseArr[0][1]]; //2.在读取稀疏数据后几行的数据(从第二行开始),并赋给原始的二维数组即可 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[] row : chessArr2) { for (int data : row) { System.out.printf( "%d\t",data ); } System.out.println(); } } }
    Processed: 0.024, SQL: 8