文章目录

  • 基本介绍
  • 应用实例

基本介绍

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

稀疏数组的处理方法是:
①记录数组一共有几行几列,有多少个不同的值(0除外)。
②把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。


二维数组转稀疏数组:
①遍历原始的二维数组,得到有效数据的个数 sum(除0外不同值)
②根据 sum 创建稀疏数组 sparseArr int[sum+1][3]
③将二维数组的有效数据数据存入到稀疏数组
(稀疏数组的第一行,三列分别记录二维数组的行、列、有效数据个数)
(后面的行记录有效数据元素,三列分别记录行、列、有效数据元素值)

稀疏数组转二维数组:
①先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
②再读取稀疏数组后几行的数据,并赋给原始的二维数组即可


应用实例

使用稀疏数组,来保留二维数组(棋盘、地图等等),把稀疏数组存盘,并且可以重新恢复为原来的二维数组数。

如下为一个棋盘通过二维数组转换为稀疏数组加以存盘和复盘:

1、创建原始二维数组并输出

     //创建一个原始的二维数组11*11,0表示无子,1表示黑子,2表示蓝子int[][] chessArr1 = new int[11][11];chessArr1[1][2] = 1;chessArr1[2][3] = 2;//输出原始二维数组for (int[] row : chessArr1){for (int data : row){System.out.print(data + "\t");}System.out.println();}


2、将二维数组转换为稀疏数组

     //将二维数组转换为稀疏数组//先遍历二维数组,得到非0数据的个数int sum = 0;for (int i = 0; i < chessArr1.length; i++) {for (int j = 0; j < chessArr1[i].length; j++) {if (chessArr1[i][j] != 0) sum++;}}//创建对应的稀疏数组并赋值int[][] sparseArr = new int[sum + 1][3];sparseArr[0][0] = 11;sparseArr[0][1] = 11;sparseArr[0][2] = sum;int count = 0; //用于记录赋值到第几行for (int i = 0; i < chessArr1.length; i++) {for (int j = 0; j < chessArr1[i].length; j++) {if (chessArr1[i][j] != 0) {count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArr1[i][j];}}}//输出稀疏数组for (int[] row : sparseArr){for (int data : row){System.out.print(data + "\t");}System.out.println();}

3、将稀疏数组转回二维数组

        //将稀疏数组转换为二维数组int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];//读取赋值for (int i = 1; i < sparseArr.length; i++) {chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];}//输出for (int[] row : chessArr2){for (int data : row){System.out.print(data + "\t");}System.out.println();}

减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现相关推荐

  1. matlab 三维数组运算,MATLAB二维三维画图仿真数组运算

    MATLAB二维三维画图仿真数组运算 1. 数学 (1) 数组运算: x=[1 2 3 4]; y=[3 4 5 6]; z=x+y %数组x与数组y相加得到数组z z = 4 6 8 10 z=x- ...

  2. php 二维数组 下标,php 二维数组排序 按指定数组下标排序

    $array = array( array( 'id' => 1, 'name' => "语文", 'listorder' => 2 ), array( 'id' ...

  3. 《c primer pius》第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的

    <c primer pius>第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处 ...

  4. python二维数组操作_Python二维数组应用与操作

    课课家将会在这里为大家详细的介绍一下Python二维数组的相关应用方法以及定义方式,相信朋友们可以从中学习到更多的知识. Python数组的应用中在实际编程中是一个非常重要的应用技术,作为Python ...

  5. 指针数组,数组指针与二维数组剖析

    int *p[3]与int (*p)[3]的区别 *p[3]这个是一个指针数组,它所代表的意思是数组中的每一个元素都是一个指针变量,而(*p)[3],p是一个指针变量,表示指向一个含有3个整型元素的一 ...

  6. 【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )

    文章目录 一.一维数组形参退化 二.二维数组形参退化 三.数组形参等价关系 一.一维数组形参退化 C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ; 将 int ar ...

  7. 间接通过new 来申请一个二维的堆内存数组

    我们知道无法直接通过new 来申请一个二维的堆内存数组,于是有人想出了这样一个办法:创建一个一维堆内存指针数组,即每个数组元素是一个指针,然后用new 给各个指针分配一个一维的堆内存数组,那么最后表示 ...

  8. arrays中copyof复制两个数组_数组,及二维数组

    1.1 命令行参数(C) 在程序运行过程中,可以向应用程序传递一些参数,这些参数称为命名行参数. public 命令行参数以字符串的形式传入args数组中.可以一次传递0-多个参数,以空格分割. 如果 ...

  9. php 初始二维数组长度,php二维数组排序与默认自然排序的方法介绍

    php二维数组排序函数,默认自然排序,即sort排序.这里可以指定按二维数组中的某个值进行多种方法排序,具体看下面的程序注释. 代码如下: /** * @function 二维数组自然排序 * @au ...

最新文章

  1. FileUpload生成图片水印,文字水印(转载)
  2. VMware 虚拟机
  3. iOS 通知观察者的被调函数不一定运行在主线程
  4. 克隆Calibrui Module
  5. Java面试题 简述jvm内存模型?
  6. 【性能优化】 之10046 事件
  7. Delphi 26 岁
  8. WCHAR char CString等常用类型互转
  9. 利用对象池优化数据库操作
  10. android studio gradle 更新方法。
  11. jQuery控制checkbox选中状态但是不显示选中
  12. Win32++ Home Page
  13. 电脑连接ios开发配置
  14. esp-idf的内存管理——内存管理组件的初始化
  15. 计算机屏幕截图按什么键,电脑按什么键自由截图
  16. MKMapView 自定义大头针
  17. no valid sudoers sources found, quitting
  18. Unity与讯飞的aiui交互
  19. linux软路由设计博客,用Ubuntu来做个软路由
  20. evc小项目:Gps功分器测试

热门文章

  1. 通过beforeClass和afterClass设置增强Spring Test Framework
  2. Java应用程序上的Twitter API
  3. BeanUtils的学习
  4. IntelliJ IDEA for Mac如何替换文件内容中指定的关键词
  5. python函数调用自身后果_python 写函数在一定条件下需要调用自身时的写法说明...
  6. theme editor android,谷歌宣布将于下月停用 Material Theme Editor
  7. 轨道运营管理专业自荐书_轨道运营管理专业自荐信x
  8. linux源码安装apache2,CentOS7编译安装Apache2
  9. yolov4论文_Alexey 大神接棒,YOLOv4 重磅来袭!快来一睹论文真容吧!| 原力计划...
  10. css table嵌套内部table不受外部影响_HTML+CSS网页一揽子(4)