一、什么是稀疏数组呢?

定义一个11*11的二维数组int[ ][ ] cherryArr=new int[11][11]

其中
cherryArr1[1][2]=1;
cherryArr1[2][3]=2;
cherryArr1[4][4]=5;
那么它转换为稀疏数组是什么样的呢?

稀疏数组一共有三列,第一列是二维数组的某个数据的行,第二列是二维数组的某个数据的列;第三列是二维数组中的某个数据;该稀疏数组第一行例外,11 11 3各代表二维数组的行、列、多少个非0数据;


二、稀疏数组有什么用呢?

在处理如五子棋这种棋盘时,使用稀疏数组保存黑子和白子的位置,可以压缩数据,节约空间的目的;


三、稀疏数组和二维数组的相互转换

1.思路

2.代码

/*** @author:抱着鱼睡觉的喵喵* @date:2021/1/26* @description:*//*** 二维数组转稀疏数组思路:* 1.遍历二维数组,得到二维数组中非零的个数* 2.创建稀疏数组,给稀疏数组的第一行进行赋值;(0-行,1-列,2-非0数)* 3.遍历二维数组,给稀疏数组赋值*//*** 稀疏数组转二维数组思路:* 1.根据稀疏数组的第一行数据,创建二维数组* 2.遍历稀疏数组,给二维数组赋值*/
public class SpareArray {public static void main(String[] args) {//创建一个原始的二维数组 11*11,0表示没有棋子,1表示黑子,2表示蓝子int cherryArr1[][]=new int[11][11];cherryArr1[1][2]=1;cherryArr1[2][3]=2;cherryArr1[4][4]=5;System.out.println("二维数组如下");for (int[] row:cherryArr1){for(int item :row ){System.out.printf("%d\t",item);}System.out.println();}//将二维数组转稀疏数组//1.先遍历二维数组,得到非0数据的个数int num=0;for (int[] row:cherryArr1){for (int item:row){if (item!=0){num++;}}}//创建对应的稀疏数组int sparseArr[][]=new int[num+1][3];//给稀疏数组赋值sparseArr[0][0]=11;sparseArr[0][1]=11;sparseArr[0][2]=num;//遍历二维数组,将非0的值存放到稀疏数组中int temp=1;for (int i=0;i<11;i++){for (int j=0;j<11;j++){if (cherryArr1[i][j]!=0){sparseArr[temp][0]=i;sparseArr[temp][1]=j;sparseArr[temp][2]=cherryArr1[i][j];temp++;}}}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]);;}//稀疏数组转二维数组int[][] cherryArr2=new int[sparseArr[0][0]][sparseArr[0][1]];for (int i=1;i<num+1;i++){cherryArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];}System.out.println("稀疏数组转二维数组如下:");for (int[] row:cherryArr2){for (int item: row){System.out.printf("%d\t",item);}System.out.println();}}
}

数据结构和算法之稀疏数组相关推荐

  1. 新星计划Day4【数据结构与算法】 稀疏数组与队列

    新星计划Day4[数据结构与算法] 稀疏数组与队列

  2. 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组

    数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...

  3. 菜鸟窝-数据结构与算法之稀疏数组

    数据结构与算法 数据结构是组织(包括存储.处理等)数据的方式,是算法的基础 程序=数据结构+算法:数据结构分为线性和非线性 五子棋问题.约瑟夫问题等都离不开数据结构与算法 常用算法案例:修路问题.最短 ...

  4. (数据结构与算法)稀疏数组案例

    案例: 将如下五子棋盘用稀疏数组保存,并有存盘退出和续上盘功能(文件输入输出) 实现思路 代码实现 import java.io.*;public class Demo01SparseArray {p ...

  5. JAVA数据结构与算法【稀疏数组】

    先看一个实际的需求: 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素 ...

  6. 数据结构和算法1 稀疏数组

    1.先看一个实际的需求 在五子棋中,有存盘退出和续上盘的功能 由于该二维数组中的很多值都是0,因此记录了很多没意义的数据,占用了很多连续的内存空间,为了节省内存空间,我们可以把这个数组做一个转换来存储 ...

  7. 数据结构(一)--稀疏数组

    数据结构复习笔记(一)–稀疏数组 介绍 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵. 如: 0 0 0 0 0 0 0 0 0 0 0 0 ...

  8. 数据结构与算法--再来聊聊数组

    再来聊聊数组 这篇我们来总结一下数组相关的一些算法,数组的特点在于我们能通过下标得到对应数据,时间复杂度在O(1),之前有多篇文章有数组相关的体系,一下来一个归纳: 数据结构与算法–判断扑克牌是否顺子 ...

  9. 数组结构与算法-007-015稀疏数组与队列

    007 稀疏数组的应用场景 基本介绍: 当一个数组中大部分元素为0,或者为同一个数值的数组时,可以稀疏数组来保存该数组 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的 ...

最新文章

  1. win mysql修改端口号_Windows10系统下查看mysql的端口号并修改的教程图解
  2. 指针:调用自定义交换函数,完成三个数整从小到大排列
  3. python输入半径计算公式_Python:09设计Circle类包括圆心半径、颜色属性,编写类方法计算周长与面积(2种方法)...
  4. CSS3否定伪类选择器
  5. unity 创建NGUI字体
  6. 人类(行为)动力学(1)——初步了解
  7. C语言小案例_OA大典案例摘录【第1378篇】联想兄弟激光机卡纸 卡定影 有折叠 卡到出纸口不出来 合集...
  8. 在电脑上怎么做报表新手_在电脑上如何制作表格_电脑制作表格的步骤教程-系统城...
  9. editplus破解源码
  10. 计算机更新好不,系统更新好还是系统不更新好?
  11. 什么是网站的样本设计
  12. 内网禁用u盘 远程协助_如何在Windows 10中禁用远程协助
  13. 我们公司没销售 - 疫情下企业软件的互联网营销
  14. 一套成熟的BPM系统应该有的功能
  15. C#WebApi下载文件
  16. 无人驾驶汽车系统入门(二)——高级运动模型和扩展卡尔曼滤波
  17. 考研计算机专业复试问题汇总——计算机网络(王道408)
  18. France beat Croatia 4-2 in World Cup final
  19. 与SCI主编邮件沟通模板
  20. Oracle 分析函数 over 和MySQL 实现类似效果写法

热门文章

  1. java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析
  2. mysql id自动递增两个_浅析Mysql索引数据结构演变,让你一看就懂
  3. python关于七巧板的代码_Css打造一个简单的静态七巧板
  4. 简述可编程控制器硬件组态及网络通信的核心思想_智能硬件设计报价诚信经营...
  5. 南陵中学2021高考成绩查询,南陵中学2019高考成绩喜报、一本二本上线情况
  6. 服务器新建项目,Perfect(swift) 搭建服务器之新建项目
  7. java 手风琴二级菜单_jQuery多级手风琴菜单实例讲解
  8. 【机器学习算法专题(蓄力计划)】十九、机器学习中SVM算法代码实操
  9. 【数据分析R语言系列】R语言函数与函数式编程、作用域和apply 家族
  10. 八十五、Python | Leetcode数据结构之图和动态规划算法系列