稀疏数组(数据结构)

  • 需求:编写五子棋游戏中,有存盘和续上盘的功能

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 1 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 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.记录数组一共有几行几列,有多少个不同值

​ 2.把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

如图,左边原始数组,右边稀疏数组

package com.boss.array;public class ArrayDemo09 {public static void main(String[] args) {//1.创建一个二维数组11*11 0:没有棋子,1:黑 2:白int[][] array=new int[11][11];array[1][2]=1;array[2][3]=2;//输出原始数组System.out.println("输出原始数组");for (int[] ints : array) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}System.out.println("===============");//转换为稀疏数组保存//获取有效值的个数int sum=0;for (int i = 0; i <11 ; i++) {for (int j = 0; j <11 ; j++) {if(array[i][j]!=0){sum++;}}}System.out.println("有效值的个数"+sum);//创建一个稀疏数组的数组int[][] array1=new int[sum+1][3];array1[0][0]=11;array1[0][1]=11;array1[0][2]=sum;//遍历二维数组,将非零的值,存分到稀疏数组中int count=0;for (int i = 0; i <array.length ; i++) {for (int j = 0; j <array[i].length ; j++) {if(array[i][j]!=0){count++;array1[count][0]=i;array1[count][1]=j;array1[count][2]=array[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i <array1.length ; i++) {System.out.println(array1[i][0]+"\t"+array1[i][1]+"\t"+array1[i][2]+"\t");}System.out.println("===================");System.out.println("还原");//1.读取稀疏数组的值int[][] array2=new int[array1[0][0]][array1[0][1]];//2.给其中的元素还原他的值for (int i = 1; i <array1.length ; i++) {array2[array1[i][0]][array1[i][1]]=array1[i][2];}System.out.println("输出还原的数组");for (int[] ints : array2) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}}
}

稀疏数组(数据结构)相关推荐

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

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

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

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

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

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

  4. 【Java数据结构与算法】第一章 稀疏数组和队列

    第一章 稀疏数组和队列 文章目录 第一章 稀疏数组和队列 一.线性结构和非线性结构 1.线性结构 2.非线性结构 二.稀疏数组 三.队列 1.队列 2.环形队列 一.线性结构和非线性结构 1.线性结构 ...

  5. 稀疏数组练习demo 数据结构和算法

    稀疏数组课后练习demo 数据结构和算法 实现了二维数组转稀疏数组保存到文件,读文件再转为二维数组 import java.io.*; import java.util.Arrays;/*** htt ...

  6. 数据结构与算法一:稀疏数组 队列 链表

    1 线性结构和非线性结构 数据结构包括:线性结构和非线性结构. 1.1 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构和 ...

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

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

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

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

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

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

最新文章

  1. python ssh模块有哪些_Python paramiko模块(实现ssh)
  2. 倒梁法matlab,在编制措施项目清单时,关于钢筋混凝土模版及支架费项目,应在清单中列明(    )...
  3. MySQL 遇到的问题
  4. 关于微机开操作票的研究22437
  5. linux 换行符_一个linux帮你做高效数据统计
  6. Akka并发编程——第五节:Actor模型(四) 停止Actor
  7. 安卓安装kali linux之Termux
  8. Go实现简单负载均衡
  9. 使用ceph-deploy搭建三节点ceph集群
  10. 无法使用带括号的初始值设定项初始化数组_leetcode32. 最长有效括号
  11. 数据库JDBCUtil 工具类 增加连接池操作
  12. CS231n——机器学习算法——线性分类(上: 线性分类器)
  13. 滑动速度监听VelocityTracker
  14. JavaScript发送短信案例
  15. logisim 快速加法器设计实验报告_八位加法器设计实验报告
  16. 计算机保研面试知识点,保研面试(附面试笔试机试)
  17. 什么是百度权重 百度指数词
  18. scrapy+python爬地图参照物应该有的坑及解决办法
  19. windows10系统超全优化方法
  20. Android中使用Room(ORM关系映射框架)对sqllite数据库进行增删改查

热门文章

  1. Python 时间常用函数及结构
  2. hdu1176 免费馅饼 动态规划 二维数组实现
  3. Mybase到期 破解
  4. cudaMemcpyToSymbol使用
  5. SaaS服务的私有化部署,这样做最高效|云效工程师指北
  6. 用手机写代码:基于 Serverless 的在线编程能力探索
  7. Quick BI电子表格: 新手亦可表格自由
  8. 教程系列——用模板快速上线一个HR 服务中心
  9. PyODPS DataFrame 处理笛卡尔积的几种方式
  10. Apache Flink CEP 实战