数据结构与算法—稀疏数组

1.基本介绍:

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

2.稀疏数组的处理方法是:

​ (1)记录数组一共有几行几列,有多少个不同的值 ;

​ (2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 。

3.二维数组与稀疏数组的转换:

二维数组转稀疏数组的思路:

(1)遍历原始的二维数组,得到有效数据(非0)的个数sum;

(2)根据sum创建稀疏数组 sparseArr int [sum+1][3];

(3)将二维数组的有效数据存入到稀疏数组。

​稀疏数组转二维数组思路:

​ (1)先读取稀疏数组的第一行,根据第一行的数据,创建二维数组;

​ (2)在读取稀疏数组后几行的数据,并赋值给二维数组即可。

如下实例:

​ 代码实现:

public class SparseArray {public static void main(String[] args) {//创建一个原始的二维数组// 0: 代表没有棋子,1 代表黑子  2代表白子int chessArr1[][] = new int[11][11];chessArr1[1][2] = 1;chessArr1[2][3] = 2;chessArr1[4][5] = 3;System.out.println("原始的二维数组");for (int[] row : chessArr1) {for (int data : row) {System.out.printf("%d\t",data);}System.out.println();}//将二维数组转为稀疏数组int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; 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;//遍历二维数组,将非0的值存到稀疏数组中int count = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (chessArr1[i][j] != 0) {count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArr1[i][j];}}}//输出稀疏数组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();//稀疏数组转为二维数组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.printf("%d\t",data);}System.out.println();}}
}

数据结构与算法---稀疏数组相关推荐

  1. 数据结构与算法————稀疏数组

    引言 数据压缩方面,我们往往可以通过稀疏数组来保存有效数据,节省存储空间. 一.稀疏数组的概念 当一个数组中大部分元素是0,或为同一个值的时候,可以使用稀疏数组来保存数组. 它是一个十分有效的存储结构 ...

  2. golang数据结构与算法——稀疏数组、队列和链表

    文章目录 一 稀疏数组 1.1 先看一个实际的需求 1.2 稀疏数组基本介绍 1.3 稀疏数组举例说明 1.4 把数组转换为稀疏数组实现 1.5 把稀疏数组还原为原数组 二 队列 2.1 队列的介绍 ...

  3. 数据结构与算法 - 稀疏数组(理解+代码实现案例)

    举例 稀疏数组第一行是原数据几行几列和几个有效数据的个数 下面的行是各个有效数组的行列与具体值 稀疏数组实现 代码实现 package DataStructures.sparsearray;/*** ...

  4. (二)数据结构与算法-稀疏数组

    先看一个实际的需求 分析问题: 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据 -> 稀疏数组 稀疏sparsearray数组 基本介绍 当一个数组中大部分元素为0,或者为同一个 ...

  5. go数据结构与算法| 稀疏数组

    文章目录 背景 场景 假代码实现 真代码实现 背景 玩了几十年了.该还的还是要还.懂的人自然懂,不懂的自然不懂.如果你与我一样浪费了几十年青春,欢迎和我一起努力并交流,什么是生活. 仅仅是敲代码,不分 ...

  6. JavaScript数据结构和算法简述——数组

    为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...

  7. JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...

  8. java 二维数据结构_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...

  9. 数据结构与算法--有序数组中找出和为s的两个数字

    有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...

最新文章

  1. java按钮监听休眠_java-休眠监控解决方案
  2. golang中字符串内置函数整理
  3. 当前记录集不支持更新_微信现已正式支持修改微信号!微信7.0.16内测版更新(附下载)...
  4. mvc3部署到mono上面遇到的问题
  5. oracle远程物化视图
  6. 一个真正成熟的人不会过度在意别人的眼光
  7. 杀毒jwgkvsq.vmx
  8. 多线程依次打印abcabc
  9. 【算法学习】【图像增强】【Retinex】White Patch Retinex 程序解读
  10. react组件卸载调用的方法_React组件如何还能跑得再快一点
  11. 基础Astar算法及节点优化python代码实现
  12. 中国地图经纬度json
  13. arcgis中的重分类
  14. 微软雅黑与等宽字体Source Code Pro下载
  15. 利用TextRank算法制作一个可以提取聊天关键词的QQ群机器人
  16. java数字转中文_java阿拉伯数字转中文数字
  17. 概率论与数理统计学习笔记(5)——极大似然估计
  18. python基本类型关键字_python中的关键字---1(基础数据类)
  19. revit二开之关联族参数的实现
  20. JavaScript CSS jQuery 网页音乐播放器

热门文章

  1. 创建物化视图commit_oracle 中物化视图讲解
  2. Mysql 755和750权限,chmod 755 究竟是什么鬼?
  3. C#读取Excel文件,准换为list
  4. 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
  5. 在目前大数据时代下,怎么能成为一名合格的数据分析师
  6. 如何阅读JAVA 字节码(一)
  7. 移动UI设计中的7种主要导航模式
  8. javascript-XMLHttpRequest
  9. 在 Windows Server 2008 中通过组策略向计算机或用户部署网络打印机
  10. workgroup无法访问?