1、先看一个实际的需求

在五子棋中,有存盘退出和续上盘的功能

由于该二维数组中的很多值都是0,因此记录了很多没意义的数据,占用了很多连续的内存空间,为了节省内存空间,我们可以把这个数组做一个转换来存储,以达到减少内存开销的目的,因此,稀疏数组就被提出来了。

2、基本介绍

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

1、稀疏数组有三列,分别记录了原数组有多少行、有多少列、有多少个不同的值
2、把不同的值的元素的行列和值记录在一个小规模的数组中,从而缩小程序的规模

如上面的数组:

可以记录为:

11 11 2
1 2 1
2 3 2

3、代码实现

public class SparseArray {public static void main(String[] args) {int chessArr[][] = new int[11][12];//为了区别行列,此处将列设置为12chessArr[1][2] = 1;chessArr[2][3] = 2;//输出原始的二维数组System.out.println("原始的二维数组:");for(int[] row : chessArr){for(int data : row){System.out.printf("%d\t", data);}System.out.println();}//将二维数组转换成稀疏数组//1、先遍历二维数组,统计非0的个数int sum = 0;for(int[] row : chessArr){for(int data : row){if(data != 0){sum++;}}}//2、创建对应的稀疏数组int[][] sparseArray = new int[sum + 1][3];sparseArray[0][0] = chessArr.length;sparseArray[0][1] = chessArr[0].length;sparseArray[0][2] = sum;int x = 1;//稀疏数组存储数据从第二行开始for(int i = 0 ; i < chessArr.length ; i++){for(int j = 0 ; j < chessArr[i].length ; j++){if(chessArr[i][j] != 0){sparseArray[x][0] = i;sparseArray[x][1] = j;sparseArray[x][2] = chessArr[i][j];x++;}}}System.out.println("稀疏数组:");for(int[] row : sparseArray){for(int data : row){System.out.printf("%d\t", data);}System.out.println();}int[][] originArray = new int[sparseArray[0][0]][sparseArray[0][1]];for(int i = 1 ; i < sparseArray.length ; i++){originArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}System.out.println("恢复后的原始二维数组:");for(int[] row : originArray){for(int data : row){System.out.printf("%d\t", data);}System.out.println();}}
}

运行结果:

转载于:https://www.cnblogs.com/lmj612/p/11197826.html

数据结构和算法1 稀疏数组相关推荐

  1. 新星计划Day4【数据结构与算法】 稀疏数组与队列

    新星计划Day4[数据结构与算法] 稀疏数组与队列

  2. 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组

    数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...

  3. 菜鸟窝-数据结构与算法之稀疏数组

    数据结构与算法 数据结构是组织(包括存储.处理等)数据的方式,是算法的基础 程序=数据结构+算法:数据结构分为线性和非线性 五子棋问题.约瑟夫问题等都离不开数据结构与算法 常用算法案例:修路问题.最短 ...

  4. (数据结构与算法)稀疏数组案例

    案例: 将如下五子棋盘用稀疏数组保存,并有存盘退出和续上盘功能(文件输入输出) 实现思路 代码实现 import java.io.*;public class Demo01SparseArray {p ...

  5. 数据结构和算法之稀疏数组

    一.什么是稀疏数组呢? 定义一个11*11的二维数组int[ ][ ] cherryArr=new int[11][11] 其中 cherryArr1[1][2]=1; cherryArr1[2][3 ...

  6. JAVA数据结构与算法【稀疏数组】

    先看一个实际的需求: 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素 ...

  7. 数据结构(一)--稀疏数组

    数据结构复习笔记(一)–稀疏数组 介绍 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵. 如: 0 0 0 0 0 0 0 0 0 0 0 0 ...

  8. 数据结构与算法--再来聊聊数组

    再来聊聊数组 这篇我们来总结一下数组相关的一些算法,数组的特点在于我们能通过下标得到对应数据,时间复杂度在O(1),之前有多篇文章有数组相关的体系,一下来一个归纳: 数据结构与算法–判断扑克牌是否顺子 ...

  9. 数组结构与算法-007-015稀疏数组与队列

    007 稀疏数组的应用场景 基本介绍: 当一个数组中大部分元素为0,或者为同一个数值的数组时,可以稀疏数组来保存该数组 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的 ...

最新文章

  1. nginx的upstream问题记录
  2. 文巾解题 185. 部门工资前三高的所有员工
  3. linux上安装activeMQ
  4. php注册机制,php自动注册登录验证机制实现代码_PHP教程
  5. python中计算如何实现_基于python如何实现计算两组数据P值
  6. java如何实现计算数据的录入_Java如何实现键盘数据的录入?
  7. Android 即时通讯开发小结(一)
  8. ug链轮设计软件_正版UG软件,UG软件代理,正版UG软件模块功能介绍
  9. FJUT 2351 T^T的图论(并查集)
  10. 二叉树的三种非递归遍历
  11. gitter 卸载_最佳Gitter渠道:学习编码
  12. 基于Vue2和jsmind.js实现思维导图
  13. 修正 Delphi XE10.4 quickEdit 显示不完整的问题
  14. 《变革中的思索》连载三:展望个人电脑的未来之路
  15. 欧拉函数的求法(三种)
  16. socket编程到底是什么
  17. 马哥SRE第八周课程作业
  18. 渲图买桌面CPU还是服务器cpu,做图用什么显卡好,图形渲染CPU重要还是显卡重要...
  19. Kaggle项目之Mobile App Store
  20. for循环的auto用法

热门文章

  1. php libswf,PHP停解析swf文件头
  2. mysql 修改表属主_mysql主从配置实现一主一从读写分离
  3. Python 基础知识 D7
  4. treeview 展开节点php,javascript实现TreeView 无刷新展开的实例代码_javascript技巧
  5. sudo chown -R $(whoami) /usr/local/lib/pkgconfig
  6. 3D数学之柏林噪声(Perlin Noise)
  7. Java求解自由落体相关问题
  8. 批量拷贝文件到服务器,Syncovery(数据备份工具)如何在windows下远程访问服务器批量拷贝文件?Syncovery图文教...
  9. mysql 协议测试_mysqlslap压力测试mysql
  10. google地球无法连接_WiFi无法连接?解决macOS Big Sur/Mojave/ Catalina上的Wi-Fi问题