
数据结构与算法学习1-----稀疏数组
具体代码实现:
发布日期:2021-05-06 19:33:04
浏览次数:5
分类:技术文章
本文共 2295 字,大约阅读时间需要 7 分钟。
最近失眠很严重,所以想借空闲时间重温也是学习一下数据结构,通过某大神的视频这里主要呈现一些代码的实现和一些我个人的理解,如有出入,还请见谅
这篇是稀疏数组与二维数组的相互转换
为什么要用稀疏数组呢,我们说二维数组 是能展现一个图形上是四边形的数据,因为有行和列, 如果是一个11*11的二维数组,就是121个点,也就是存121份数据。我们可以把创建数组后没有操作的数据叫做默认数据 如果这121份数据几乎都是默认数据,用二维数组存放至文件或者磁盘 是不是很浪费空间呢,此时就可以用稀疏数组来实现 如下图(鄙人不善于画图)
package array;import org.junit.Test;public class Array1 { //稀疏数组<-->二维数组 模拟五子棋存盘 1代表白子 2代表黑子 0代表五子 @Test public void fun1() { int[][] originArray = new int[11][11]; originArray[1][2] = 1; originArray[2][3] = 2; System.out.println("原始棋盘数组:"); for (int[] rows : originArray) { for (int item : rows) { System.out.printf("%d\t", item); } System.out.println(); } //拿到稀疏数组的第一行并赋值 int rowNum = 1; for (int[] rows : originArray) { for (int item : rows) { if (item != 0) { rowNum ++; } } } int [][] sparseArr = new int[rowNum][3]; sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = rowNum - 1; //稀疏数组每一行赋值 int index = 1; for (int row = 0; row < originArray.length; row++) { for (int col = 0; col < originArray[row].length; col++) { if (originArray[row][col] != 0) { sparseArr[index][0] = row; sparseArr[index][1] = col; sparseArr[index][2] = originArray[row][col]; index++; } } } System.out.println("转换的稀疏数组是:"); for (int[] rows : sparseArr) { for (int item : rows) { System.out.printf("%d\t", item); } System.out.println(); } //转换回二维数组 int [][] originArr2 = new int[11][11]; for (int row = 1; row < sparseArr.length; row++) { int[] ints = sparseArr[row]; originArr2[ints[0]][ints[1]] = ints[2]; } System.out.println("转换回的二维数组是:"); for (int[] rows : originArr2) { for (int item : rows) { System.out.printf("%d\t", item); } System.out.println(); } } }
当然并不是所有时候都适合用这个稀疏数组,这是有一个适用值的
如果有不同意见 欢迎讨论~发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月31日 10时50分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
将本地已有的maven工程导入工作空间
2019-03-03
mysql中没有boolean,而是tinyint
2019-03-03
这个坑
2019-03-03
spring boot和sping的一些注解
2019-03-03
Mybatis整合ehcache
2019-03-03
Java基础之反射
2019-03-03
线程池之SingleThreadPool学习
2019-03-03
对象的创建、内存布局和访问定位
2019-03-03
TCP第4次挥手为何要等待2MSL才关闭?
2019-03-03
Redis支持的5种数据类型
2019-03-03
FreeRTOS学习笔记(9)——内存管理
2019-03-03
FreeRTOS学习笔记(10)——中断管理
2019-03-03
CC2640R2F学习笔记(1)——搭建环境、编译烧写
2019-03-03
ESP8266学习笔记(10)——官方WebServer
2019-03-03
CC2640R2F学习笔记(6)——UART串口使用
2019-03-03
SHELL命令
2019-03-03
数据结构与算法分析 一、引言(本书内容 + 递归简论)
2019-03-03
Oracle的高级复制、流复制、备库的区别
2019-03-03
redis命令学习
2019-03-03
自然划分的3-4-5规则
2019-03-03