day01-java数据结构之稀疏数组
2020-07-12 17:35
260 查看
先简单介绍下稀疏数组吧
--->当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
1)记录数组一共有几行几列,有多少个不同的值
2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
用经典的例题来解说下:
(注:我是在b站跟尚硅谷韩顺平老师学的数据结构,他讲的很好通俗易懂,强烈推荐给小白!当然这里面的一些资料也是尚硅谷的,若有侵权就删。)
得说下稀疏数组的格式:row col value 这三列 至于行是看二维数组的有效数据来的 一般是二维数组中有效数据+1便是稀疏数组中的行
其目标就是将一个11*11的二维数组转换成稀疏数组,再将稀疏数组转换为二维数组!
下面就是我自己写的代码(初学也是跟着老师敲的):
1.创建一个11*11的二维数组,用0来表示没有数据部分,1表示黑子,2表示蓝子,给二维数组有效位赋值,并用增强for来遍历。
2.在得到二维数组的情况下我们可能不知道数组的有效数据有多少个,所以要遍历数组了,并且可以用count来统计数组内有效数据的个数。
3.创建对应的稀疏数组,并且遍历二维数组,将有效数据赋值给稀疏数组(有一个计数器的小问题,详细见代码注释。)
4.遍历稀疏数组并且格式化打印出来。
[code]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; // 增强for输出下数组 System.out.println("原始的二维数组!"); for(int [] row:chessArr1){ for(int data:row){ System.out.printf("%d\t",data); } System.out.println(); } // 第二步 遍历二维数组 int count = 0; for (int i = 0; i < 11; i++) { for(int j =0;j<11;j++){ if(chessArr1[i][j] != 0){ count++; } } } // 验证二维数组中非0数据个数 System.out.printf("count="+count); System.out.println(); // 第三步 创建对应的稀疏数组 int sparseArr[][] = new int[count+1][3]; // 给稀疏数组的第一行第一列复制 sparseArr[0][0]=11;// 因为数组索引是从0开始 所以这里的下标也是从零开始 sparseArr[0][1]=11; sparseArr[0][2]=count; // 第一行第三列 为二维数组中有效数据个数 // 遍历二维数组 将二维数组中的非0数据赋给稀疏数组 // 定义一个计数器,当二维数组中第一次出现非零的数可以执行 int counterregister = 0; for (int i = 0; i < 11; i++) { for(int j =0;j<11;j++){ if(chessArr1[i][j] != 0){ counterregister++; sparseArr[counterregister][0]=i; sparseArr[counterregister][1]=j; sparseArr[counterregister][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]); } } }
(这里我就先写下二维数组怎么转稀疏数组啦,稀疏数组转二维数组就留给有兴趣的朋友研究吧。)
很棒的视频出处:https://www.bilibili.com/video/BV1E4411H73v?p=9
欢迎大家一起交流!祝大家早日走向人生巅峰!
相关文章推荐
- 【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)
- Java数据结构与算法——01 数据结构概述与稀疏数组实现
- Java之美[从菜鸟到高手演变]之数据结构基础、线性表、栈和队列、数组和字符串
- 数据结构(java语言描述)串与数组——稀疏矩阵的三元组表存储
- Java数据结构与算法之数组排序——奇偶排序
- 数据结构:java数组特点以及声明数组类
- 数据结构之稀疏数组的实现
- 数据结构(java语言描述)串与数组——文件加解密
- 数据结构实验之数组二:稀疏矩阵
- 数据结构:浅谈数组(代码主要以Java形式展开)
- 数据结构---------稀疏数组(笔记)
- 个人数据结构与算法学习总结-数组与稀疏数组
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之数组二:稀疏矩阵
- 数据结构——数组—稀疏矩阵及运算
- #数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA)
- 数据结构之稀疏sparsearry数组
- 数据结构——栈的java实现(一)-使用顺序存储结构(数组)以及实现
- Java数据结构与算法--数组
- java 数组与链表的嵌套使用(数组链表--数据结构)