举例



稀疏数组第一行是原数据几行几列和几个有效数据的个数

下面的行是各个有效数组的行列与具体值

稀疏数组实现

代码实现

package DataStructures.sparsearray;/*** 二维数组转稀疏数组 与 稀疏数组转成二维数组*/
public class SparseArray {public static void main(String []args){//创建一个原始二维数组11*11//0:表示没有棋子,1:表示黑色棋子 , 2:表示蓝色棋子int chessArr1[][] = new int[11][11];chessArr1[1][2] = 1;chessArr1[2][3] = 2;chessArr1[4][5] = 2;//输出一下原数组for (int[] row : chessArr1){for (int data : row){System.out.printf("%d\t",data);}System.out.println();/*** 结果:* 0  0   0   0   0   0   0   0   0   0   0* 0    0   1   0   0   0   0   0   0   0   0* 0    0   0   2   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   2   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0*/}//将二维数组 转 稀疏数组的思路//1.先遍历二维数组,得到非0数据的个数int sum = 0;for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].length; j++){if(chessArr1[i][j] != 0) {sum++;}}}// System.out.println(sum); //2//2.创建对应的稀疏数组int sparseArr[][] = new int[sum+1][3];//给稀疏数组第一行数据sparseArr[0][0] = 11;sparseArr[0][1] = 11;sparseArr[0][2] = sum;//把非0值存放到稀疏数组中int count = 0; //用于记录是第几个非0数据for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].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++){for (int j = 0; j<sparseArr[0].length; j++){System.out.print(sparseArr[i][j]+"\t");}System.out.println();/*** 结果:* 得到的洗漱数组~~~~~~~~~~~* 11  11  3* 1    2   1* 2    3   2* 4    5   2*/}//将稀疏数组 --》 恢复成 原始的 二维数组/*** 1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组* 2.再读取稀疏数组后几行的数据,并赋给 原始二维数组 即可。*/// 1.想读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组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 i = 0; i<chessArr2.length;i++){for (int j = 0; j<chessArr2[0].length; j++){System.out.print(chessArr2[i][j]+"\t");}System.out.println();/*** 结果:* 0    0   0   0   0   0   0   0   0   0   0* 0    0   1   0   0   0   0   0   0   0   0* 0    0   0   2   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   2   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0* 0    0   0   0   0   0   0   0   0   0   0*/}}
}

数据结构与算法 - 稀疏数组(理解+代码实现案例)相关推荐

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

    数据结构与算法-稀疏数组 1.基本介绍: ​ 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 2.稀疏数组的处理方法是: ​ (1)记录数组一共有几行几列,有多少个 ...

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

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

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

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

  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. 2021-9-下旬 数据结构-线性表-动态数组-java代码实现

    信管的数据结构讲的太水了,遂重学(看的网课:恋上数据结构与算法,讲的very good),为算法学习打基础(都大三了还在打基础),顺便在leetcode上跟进一些相关的题,记录在这里,这里最方便复习 ...

最新文章

  1. #Java夜未眠# 读书笔记
  2. 【Python】8000字:Python时间系列之datetime模块
  3. 多样性文本生成任务的研究进展
  4. boost::phoenix::delete和using boost::phoenix::new_相关的测试程序
  5. windows----------windows10如何固定局域网ip
  6. retrofit 2.0 android 教程,初识Retrofit2.0
  7. 醒醒吧!送给那些盲目自学的人
  8. java管理分类编写_java029学生管理系统的编写
  9. 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
  10. vijos1053 用spfa判断是否存在负环
  11. 实战篇-六十六行完成简洁的Rss输出类
  12. MFC窗口之间传递数据(结构体)
  13. oracle odi 目标数据存储: 临时目标数据存储未与连接关联,ODI知识模块--IKM Oracle Incremental Update...
  14. 软件测试中的测试文档
  15. 爱立信实习总结之面试心得
  16. Java进销存管理系统
  17. Win10打开“此电脑”读绿条,显示“正在处理”
  18. 常见编码格式(中文编码)
  19. 虚拟机不正常关机,到时无法进入文本界面
  20. 屏幕分辨率:聊一聊像素

热门文章

  1. UVa 297 - Quadtrees
  2. JavaScript操作大全整理(思维导图三--函数基础)
  3. 关于SOAP的几篇文章
  4. 浅尝EffectiveCSharp_1
  5. 解决问题:HTTP 错误 401.1 - 未授权:登录失败【转】
  6. linux 进入一个中文乱码的目录的方法
  7. 计算机进去pe怎么设置用户,电脑密码怎么设置,教您设置电脑开机密码
  8. android蓝牙传输的是字符吗,Android蓝牙接收到的串行数据乱码
  9. flock lock ex php,php – flock有可能用LOCK_EX返回false吗?
  10. 如何设置鼠标滚轮html,win7如何设置鼠标滚轮