Java数据结构笔记1——稀疏数组sparse array
线性结构
1.数据元素一对一
2.线性结构存储结构
顺序存储结构(常见:数组):顺序存储线性表为顺序表,存储元素地址连续
链式存储结构(常见:链表):链式存储线性表为链表,存储元素不一定连续
元素节点存放数据元素及相邻元素地址信息
线性结构常见:数组、队列、链表和栈
分清逻辑结构和存储结构:如,链表是线性结构链式存储
非线性结构
非线性结构包括:二维数组,多维数组,广义表,树结构,图结构
稀疏数组(sparse array)
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
1.记录数组一共有几行几列,有多少个不同的值
2.把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模(这个小规模数组就是sparse array)
实例
棋盘
黑棋值1,蓝值2
sparse array第一行写共几行几列和有胸啊数据个数,之后写内部不同位置和值
再通过sparse array反推回原来数组
整理:
原始——>sparse
1.遍历 原始二维数组,得到有效数据个数sum
2.根据sum创建sparseArr int[sum+1][3]
3.有效数据存入sparse array
4.sparse array存入磁盘中(io部分内容)
sparse——>原始
1.读磁盘sparse array,读第一行,根据第一行创建二维数组,chessArr2=int [11][11]
2.读取后几行数据,赋值给原始二维数组
实战
1.原数组
没赋值default为0
2.后遍历二维数组得到非零数个数sum
int sum=0;for(int i=0;i<chessArr.length;i++) {for(int j=0;j<11;j++) {if(chessArr[i][j]!=0)sum++;}}System.out.print("sum="+sum);
可以看到chessArr.length就是11
3.构建sparse Array
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<chessArr.length;i++) {for(int j=0;j<11;j++) {if(chessArr[i][j]!=0) {count++;sparseArr[count][0]=i;sparseArr[count][1]=j;sparseArr[count][2]=chessArr[i][j];}}}System.out.println();
输出sparseArr验证
System.out.println("sparse array");
for(int i=0;i<sparseArr.length;i++) {for(int j=0;j<3;j++) {System.out.printf("%d\t",sparseArr[i][j]);}System.out.println();
}
4.从sparse array复原成chessArr2并输出
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];
}
System.out.println();
for(int[] row:chessArr2) {for(int data:row) {System.out.printf("%d ",data);}System.out.println();
}
Java数据结构笔记1——稀疏数组sparse array相关推荐
- 数据结构与算法--稀松数组(Sparse Array)
此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 需要强调的是,稀松数组适用于二维数组中大部分数据具有相同的值的情 ...
- (JAVA学习笔记) 关于稀疏数组
稀疏数组介绍 当一个数组中大部分的元素为0,或者同一值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方式是: 1.记录数组一共有几行几列,有多少个不同的值 2.把具有不同值的元素的行列及值记 ...
- 数据结构与算法---稀疏数组
数据结构与算法-稀疏数组 1.基本介绍: 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 2.稀疏数组的处理方法是: (1)记录数组一共有几行几列,有多少个 ...
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- java 二维数据结构_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- 数据结构与算法————稀疏数组
引言 数据压缩方面,我们往往可以通过稀疏数组来保存有效数据,节省存储空间. 一.稀疏数组的概念 当一个数组中大部分元素是0,或为同一个值的时候,可以使用稀疏数组来保存数组. 它是一个十分有效的存储结构 ...
- Java 数据结构笔记
Java 数据结构学习笔记 一.线性结构 (一)常见线性结构 数组 队列 链表 栈 (二)线性结构特点 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储 ...
- java 数据结构详解,数组,集合,HashMap
数组的特性: 数组在内存中是一块连续的存储单元存储起来的,声明数组的时候我们必须声明其长度,这样才会为我们声明一个连续的存储区域. 这种存储方式造成我们想要往数组中存储一个数据时那么其后面各个元素都要 ...
- golang数据结构与算法——稀疏数组、队列和链表
文章目录 一 稀疏数组 1.1 先看一个实际的需求 1.2 稀疏数组基本介绍 1.3 稀疏数组举例说明 1.4 把数组转换为稀疏数组实现 1.5 把稀疏数组还原为原数组 二 队列 2.1 队列的介绍 ...
- 数据结构与算法 - 稀疏数组(理解+代码实现案例)
举例 稀疏数组第一行是原数据几行几列和几个有效数据的个数 下面的行是各个有效数组的行列与具体值 稀疏数组实现 代码实现 package DataStructures.sparsearray;/*** ...
最新文章
- 如何利用计算机计算天数,计算机如何计算两个日期之间的天数
- MySQL单表数据量过千万,采坑优化记录,完美解决方案
- undefined reference to 'pthread_mutex_trylock'
- php sqlsrv 下载,php_sqlsrv_ts.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
- 洛谷P1040-加分二叉树-dp+二叉树
- php路由类默认模块,微擎入口路由及其模块入口路由 - YangJunwei
- WIN7打补丁后VS2012出现版本不兼容
- 《Android进阶指北》— Android 书籍
- Redhat 7 进入救援模式
- echarts地图文字重叠解决方案_踩坑日记:在Echarts中国地图踩到的坑
- 微PE系统盘制作 / 重装系统
- 软件开发模型2:增量模型/螺旋模型/敏捷模型
- Excel VBA 学习总结 - 基础知识
- 全市场等权中位数_市场指数估值周报20200418
- [转载]铁路订票系统的简单设计
- 3-5数据链路层-局域网
- mysql主从skip1677_mysql主从复制部署
- golang coredump分析
- 有12个球,外形相同,其中一个小球的质量与其他11个不同,给一个天平,需要几次把这个小球找出来并且求出这个小球是比其他的轻还是重
- 60 个 Python 小例子
热门文章
- Exchange Server 2013文档系列之四: Exchange Server 2013在Windows 2008 R2下部署
- Gallery 3D+倒影 滑动切换图片示例
- NYOJ 214(LIS,二分插入)
- ubuntu13.10 归档管理器解压zip文件中文乱码问题的解决(亲测成功)
- Windows自动关机设置
- 如何把静态成员导出_dll导入导出及local vftable问题
- 基于python爬虫的加盟品牌数据挖掘研究与实现_基于Python 语言的Web 数据挖掘与分析研究...
- android调用本地js文件上传,原生JS实现前端本地文件上传
- 未公开接口主要指以下哪几类_办公家具配套主要有哪些家具-GAVEE家维依为您解答...
- php 数组 utf8,PHP数组编码gbk与utf8互相转换的两种方法实例分享