关注 “弋凡”(YiFan)微信公众号吧 记录简单笔记 做你的最爱

1,定义

稀疏数组可以看作普通二维数组的压缩,这里的普通数组指无效数据远大于有效数据

稀疏数组分为3

行        列      值
r1      c1      v1
r2      c2      v2
...    ...     ...

普通二维数组 - 无效数据远远大于有效数据

0    0   0   0   0   0   0   0   0   0   0
0   1   0   0   0   0   0   0   0   0   0
0   0   2   0   2   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

稀疏数组

11   11  3
1   1   1
2   2   2
2   4   2

2,代码实现

package com.yifan.nolinear;import java.io.*;/*** @Author YIFan* @Date 2020/6/7 17:49* @Version 1.0*/// 稀疏数组
public class SparseArray {public static void main(String[] args) throws IOException {// 创建一个二维数组 11*11// 0 表示没有数组  1 表示黑子  2 表示 白子int[][] chessArry = new int[11][11];chessArry[1][1] = 1;chessArry[2][2] = 2;chessArry[2][4] = 2;// 输错原始数组System.out.println("原始数组...");for (int[] row : chessArry) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}int sum = 0;//将二维数组转化为稀疏数组//1,二维数组得到非零数据的个数for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if(chessArry[i][j] != 0 ){sum++;}}}//2,创建对应的稀疏数组int sparseArr[][] = new int[sum+1][3];// 给稀疏数组赋值// 行数sparseArr[0][0] = 11;// 列数sparseArr[0][1] = 11;// 有效数sparseArr[0][2] = sum;//3,遍历二维数组,将非0的值存到sparseArr中//------> (稀疏数组格式)  行   列   值int count = 0; // 用于记录第几个是非0数据for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if(chessArry[i][j] != 0 ){count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArry[i][j];}}}//4,输出稀疏数组System.out.println();System.out.println("稀疏数组为....");//写入到文件中File file = new File("d:/a.data");FileOutputStream in = new FileOutputStream(file);for (int i = 0; i < sparseArr.length; i++) {String str = sparseArr[i][0]+"-"+sparseArr[i][1]+"-"+sparseArr[i][2]+"\n";in.write(str.getBytes());System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);}System.out.println("写入文件成功...");in.close();//5,将稀疏数组还原成原始的二维数组/** 1,先读取稀疏数组的第一行,根据第一行数据,创建原始的二维数组* 2,在读取稀疏数组的后几行数据,并赋值给二维数组* *///        int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
//        从文件中读取int[][] chessArr2 = null;BufferedReader reader = null;System.out.println("以行为单位读取文件内容,一次读一整行:");reader = new BufferedReader(new FileReader(file));String tempString = null;int line = 1;// 一次读入一行,直到读入null为文件结束while ((tempString = reader.readLine()) != null) {// 显示行号System.out.println("line " + line + ": " + tempString);String[] split = tempString.split("-");int row = Integer.parseInt(split[0]);int col = Integer.parseInt(split[1]);if(line==1){chessArr2  = new int[row][col];}else {chessArr2[row][col] = Integer.parseInt(split[2]);}line++;}reader.close();//        用稀疏数组进行还原
//        for (int i = 1; i < sparseArr.length; i++) {//            int row = sparseArr[i][0];
//            int col = sparseArr[i][1];
//            chessArr2[row][col] = sparseArr[i][2];
//        }System.out.println("新的二维数组...");for (int[] row : chessArr2) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}}}

3,效果图

快来关注“弋凡”微信公众号吧

数据结构之稀疏数组 - SparseArray相关推荐

  1. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

    文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...

  2. 【数据结构】稀疏数组

    稀疏数组保存五子棋棋盘 思路:二维数组模拟棋盘 --->稀疏数组--->序列化到文件中保存--->反序列化得到稀疏数组--->还原二维数组   对象序列化需要实现Seriali ...

  3. 数据结构之稀疏数组队列

    文章目录 1.稀疏数组 1.1.实际需求 1.2.稀疏数组应用 1.2.1.稀疏数组处理方法 1.2.2.举例说明 1.3.应用实例 1.3.1.思路分析 1.3.2.代码实现 1.4.课后练习 2. ...

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

    稀疏数组 Sparse Array 当一个数组中有大量元素相同时,可以用稀疏数组来表示,通过将有用信息记录在小规模的数组中来缩减程序规模 原数组: [0000102000300000004000000 ...

  5. 一、稀疏数组的实际应用和代码实现

    稀疏数组 1.实际需求 使用二维数组记录棋盘 2.分析问题 因为二维数组中的很多值都是默认值0,因此记录了很多没有意义的数据,由此我们引出稀疏数组 3.稀疏数组的基本介绍 (1)当一个数组中大部分元素 ...

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

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

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

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

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

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

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

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

最新文章

  1. 理解卷积神经网络?看这篇论文就够了
  2. FileReader对象和FormData对象
  3. swift中使用core data
  4. Linux 下使用openSSL 生成RSA密钥对
  5. 别人的代码是火箭,我的代码是乌龟……
  6. 深度学习主机环境配置: Win10+Nvidia GTX 1080i+CUDA8.0+CUDDN6
  7. Heap(堆结构/优先队列)-Swift实现
  8. 从零开始数据科学与机器学习算法-朴素贝叶斯-07
  9. jena java_eclipse导入jena源码
  10. linux 网络编程:使用两线程实现socket同时收发数据
  11. wince Hive注册表实现机制
  12. Unity3D占用内存太大的解决方法【先转,慢慢看】
  13. C# FAQ: const和static readonly有什么区别?
  14. 倒立摆及其应用//2021-2-23
  15. 京东质检报告要求和检测项目-京东质检报告怎么弄
  16. Chrome扩展程序应用商店方式一
  17. 读书笔记: 《亿级流量网站架构核心技术》(开涛的那本)
  18. 怎么学大数据?该从哪学起?
  19. Git笔记(三)git commit撤销
  20. 如何禁止NavigationController的向右滑动返回

热门文章

  1. #论文 《ImageNet Classification with Deep Convolutional Neural Networks》
  2. Python编程基础:第二十九节 异常Exception
  3. 暑期总结之--c#界面设计作业Mini U-NET(多图杀猫)
  4. lucene源码分析(1)基本要素
  5. 40亿移动设备的用户画像和标签架构实践
  6. 跨域post请求实现方案小结--转
  7. struts深入理解之登录示例的源码跟踪
  8. python对XML的解析
  9. 2017年度盘点:15个最流行的GitHub机器学习项目 By 机器之心2017年12月21日 15:23 在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学、机
  10. 任正非:进军高端市场的同时,华为要防范未来竞争者从低端崛起