稀疏数组课后练习demo 数据结构和算法

实现了二维数组转稀疏数组保存到文件,读文件再转为二维数组


import java.io.*;
import java.util.Arrays;/*** https://www.bilibili.com/video/BV1E4411H73v?p=9* 稀疏数组课后练习* @author zhuangbinan 2021.12.14*/
public class SparseArrayTest {public static void main(String[] args) {//有一个棋盘 有11行11列 11*11 = 121int chessLength = 11;int chessHeight = 11;//用二维数组表示int [][] chessArr = new int [chessLength][chessHeight];//初始化的棋盘上0表示空着的,二维数组的默认值也是0//棋盘上有 黑子,蓝子, 1表示黑子, 2表示蓝子//在棋盘的第2行第3个放了一个黑子//       第3行第4个放了一个蓝子chessArr[1][2] = 1;chessArr[2][3] = 2;//输出棋盘 ,查看效果queryDoubleArray(chessArr);// 需求: 棋盘要有 存盘到文件,读取存盘复盘功能// 要做到存盘文件要尽可能少的占用磁盘空间// 可以用到稀疏数组// 稀疏数组: 是一个双列数组,第一行第一列存了原始棋盘有多少行,第二列存了有多少列,第三列存了原始棋盘有几个棋子;// 第二行 到 最后一行, 存的是 棋子的位置 和值,// 例如 :稀疏数组的第二行第一列是原始棋盘的第一个棋子的行数,//      第二行第二列是第一个棋子的列数,//      第二行第三列是第一个棋子的值//// 行(row)    列(col)   值(value)//原始棋盘转为稀疏数组//首先为了创建稀疏数组,要获取原始棋盘上棋子数量int count = 0;for (int[] row : chessArr) {for (int col : row) {if (col != 0) {count ++;}}}System.out.println("棋盘上棋子数量:"+count);//创建稀疏数组int[][] sparseArr = new int[count + 1][3];//System.out.println("查看初始化的稀疏数组");queryDoubleArray(sparseArr);//给稀疏数组填值//第一行sparseArr[0][0] = chessLength;sparseArr[0][1] = chessHeight;sparseArr[0][2] = count;//第二行 - 最后一行int num = 1;for (int row = 0; row < chessArr.length; row++) {for (int col = 0; col < chessArr.length; col++) {if (chessArr[row][col] != 0) {sparseArr[num][0] = row;sparseArr[num][1] = col;sparseArr[num][2] = chessArr[row][col];num ++;}}}System.out.println("查看有值后的稀疏数组");queryDoubleArray(sparseArr);//稀疏数组有值后,要进行存盘;//将数组转为字符格式File file = new File("chessSrc.txt");try {FileOutputStream outputStream = new FileOutputStream(file);for (int[] row : sparseArr) {for (int col : row) {String s = col + ",";outputStream.write(s.getBytes());}outputStream.write("\n".getBytes());}outputStream.close();}catch (Exception e){e.printStackTrace();}//存到chessSrc.txt文件里了//现在要读出来,转为棋盘try {FileReader fr2 = new FileReader(file);BufferedReader bufferedReader2 = new BufferedReader(fr2);int readRows = 0;while (true) {String line = bufferedReader2.readLine();if (line != null) {readRows ++;}else {break;}}bufferedReader2.close();fr2.close();//首先要根据读到的文件判断有几行,好创建稀疏数组System.out.println("有几行:"+readRows);//稀疏数组总是3列,创建复原的稀疏数组int [][] recoverySparseArr = new int[readRows][3];//再读一次文件,给稀疏数组填充值FileReader fr = new FileReader(file);BufferedReader bufferedReader = new BufferedReader(fr);int row = 0;while (true) {String line = bufferedReader.readLine();if (line != null) {String[] lineArr = line.split(",");System.out.println(Arrays.toString(lineArr));recoverySparseArr[row][0] = Integer.valueOf(lineArr[0]);recoverySparseArr[row][1] = Integer.valueOf(lineArr[1]);recoverySparseArr[row][2] = Integer.valueOf(lineArr[2]);row ++;} else {break;}}bufferedReader.close();fr.close();System.out.println("查看复原后的稀疏数组:");queryDoubleArray(recoverySparseArr);//再把稀疏数组还原成二维棋盘//首先读取第一行,创建二维数组int [][] recoveryChessArr =new int[recoverySparseArr[0][0]][recoverySparseArr[0][1]];//给里面填充值for (int i = 1; i < recoverySparseArr.length; i++) {recoveryChessArr[recoverySparseArr[i][0]][recoverySparseArr[i][1]]=       recoverySparseArr[i][2];}System.out.println("查看复原后的棋盘");queryDoubleArray(recoveryChessArr);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void queryDoubleArray(int [][] doubleArr){System.out.println();for (int[] row : doubleArr) {for (int col : row) {System.out.print(col + " ");}System.out.println();}}}

稀疏数组练习demo 数据结构和算法相关推荐

  1. 怎样将树的中序遍历的数输入到一个数组中_数据结构与算法-二叉查找树平衡(DSW)...

    上一节探讨了二叉查找树的基本操作,二叉查找树的查找效率在理想状态下是O(lgn),使用该树进行查找总是比链表快得多.但是,该论点并不总是正确,因为查找效率和二叉树的形状息息相关.就像这样: 图1-1给 ...

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

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

  3. 求最大子数组和(数据结构和算法C++)

    求最大子数组和 题目 纠错1: 修改1: 动态规划1: 动态规划的进一步优化: 贪心法1: 题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. sqoop数据迁移的应用
  2. 如何强制“ git pull”覆盖本地文件?
  3. Linux的NTP配置总结(转)
  4. C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
  5. JAVA数据库连接池实现
  6. MailMail正式发布!注册码免费发放活动开启!(已结束~~不要再回复咧~)
  7. 自创解决键盘最后退出的问题
  8. 泛微云桥e-Bridge任意文件读取
  9. 思科模拟器配置默认路由(下一跳使用端口)
  10. 如何使移动设备字体大小自适应
  11. Allegro打散Group的两种方法操作指导
  12. Win系统如何修改远程桌面端口3389
  13. (优化解决)低时间解决偶位回文
  14. 一个90后对前辈们的“ 宣战”
  15. 获取当前时间年月周(按每月周一开始到周日算第一周)
  16. 前端实现lottie案例
  17. linux p2p download tools
  18. 算法的力量 ——李开复
  19. JpaRepository动态查询sql
  20. TypeError: Cannot create property ‘csrq‘ on string ‘‘“

热门文章

  1. PLSQL 误删表恢复及误删数据恢复
  2. linux系统fasta程序,fasta格式文件处理大全(一)
  3. microsoftfixitoffice官方清理软件_电脑卡?试试这几款电脑必备清理优化软件
  4. VMware残留问题
  5. canvas小虫子(利用canvas形成多个形状类似虫子的线条)
  6. win10下深度linux系统怎么安装,u深度win10pe安装win10系统教程
  7. 三星Galaxy S21系列5G手机竟成了《天赐的声音》舞台上最亮的星?
  8. Python:士兵与枪(类的使用)
  9. 一年半的外包程序员心得体会
  10. 快速打造微信小程序(超详细)