package mainimport ("encoding/json""fmt""os"
)//定义一个结构体保存原始矩阵的信息
type sparseNode struct {Row intCol intVal int
}//定义一个结构体保存反序列化后矩阵的信息
type unSparseNode struct {Row intCol intVal int
}func main(){//1.定义一个原始矩阵var arr [11][11]intarr[1][2] = 1arr[2][3] = 2//2.打印原始矩阵for _, v1 := range arr{for _, v2 := range v1{fmt.Printf("%d  ", v2)}fmt.Println()}//3.将原始矩阵转换为一个稀疏矩阵//思路://    定义一个切片用来作为稀疏矩阵//    稀疏矩阵只保存原始矩阵的特殊信息://      稀疏矩阵的第一个元素保存矩阵的大小和默认值//     稀疏矩阵中保存原始矩阵中不是默认值的行、列、值的信息//定义一个稀疏矩阵切片var sparseArr []sparseNode//先保存稀疏矩阵中第一个元素,即原始矩阵的大小和默认值valNode := sparseNode{Row: 11,Col: 11,Val: 0,}sparseArr = append(sparseArr, valNode)//接着保存原始矩阵中的特殊信息到稀疏矩阵for i, v1 := range arr{for j, v2 := range v1{if v2 != 0{valNode := sparseNode{Row: i,Col: j,Val: v2,}sparseArr = append(sparseArr, valNode)}}}//打印稀疏矩阵for _, v := range sparseArr{fmt.Printf("%d  %d  %d\n", v.Row, v.Col, v.Val)}//4.到这里就完成了原始矩阵转换稀疏矩阵,根据实际应用可以将稀疏矩阵落盘到文件或者通过网络发送给其他人//其中落盘的方式有多种,可以按照稀疏矩阵直接落盘,或者将稀疏矩阵进行序列化为json字符串落盘到文件//这里使用较为复杂的序列化落盘方式实现,json字符串既可以落盘,也可以网络传输bytes, err := json.Marshal(&sparseArr)if err != nil {panic(err)}//5.打印序列化后的JSON字符串fmt.Println(string(bytes))//6.到这里就可以将JSON字符串进行落盘或者网络传输了,这里先实现落盘存储w, err := os.Create("sparseArr.json")if err != nil {panic(err)}defer w.Close()_, err = w.Write(bytes)if err != nil {panic(err)}//------------------------还原稀疏矩阵为原始矩阵------------------------------//1.打开磁盘文件读取数据r, err := os.Open("sparseArr.json")if err != nil {panic(err)}defer r.Close()fileInfo, err := r.Stat()if err != nil {panic(err)}buf := make([]byte, fileInfo.Size())_, err = r.Read(buf)if err != nil {panic(err)}//2.反序列化JSON字符串,首先定义一个结构体unSparseNode用来保存反序列化数据//再定义一个切片存储反序列化后的所有数据var unSparseArr []unSparseNodeerr = json.Unmarshal(buf, &unSparseArr)if err != nil {panic(err)}//3.打印反序列化后的数据fmt.Println(unSparseArr)//4.根据反序列化后的切片数据还原原始矩阵//在初始化二维数组的时候遇到了一个问题,就是在初始化的时候数组大小必须指定常量//如果哪位大神有其他思路欢迎留言一起探讨,我暂时就这样写死了unArr := make([][11]int, unSparseArr[0].Row)for i, v1 := range unSparseArr{if i != 0 {unArr[v1.Row][v1.Col] = v1.Val}}//5.打印还原后的原始矩阵for _, v1 := range unArr{for _, v2 := range v1{fmt.Printf("%d  ", v2)}fmt.Println()}
}

数据结构--稀疏矩阵的一种实现相关推荐

  1. 数据结构 稀疏矩阵的实现方法

    稀疏矩阵的实现 什么是稀疏矩阵,怎么定义才是稀疏矩阵?假设在m x n的矩阵中,有t个不为0的元素.令z=t/(m x n),若z<=0.05则称此矩阵为稀疏矩阵.由于稀疏矩阵的非0元素较少,所 ...

  2. 二叉树----数据结构:二叉树的三种遍历及习题

    二叉树----数据结构:二叉树的三种遍历,利用递归算法. 关于二叉树的遍历,应用非常广泛,不单单是访问打印结点,还可以进行一系列的操作,如赋值.删除.查找.求二叉树的深度等等. 有递归和非递归两种算法 ...

  3. 稀疏矩阵 c语言,C语言数据结构 稀疏矩阵

    <C语言数据结构 稀疏矩阵>由会员分享,可在线阅读,更多相关<C语言数据结构 稀疏矩阵(4页珍藏版)>请在人人文库网上搜索. 1.实验十 稀疏矩阵#include #defin ...

  4. noj数据结构稀疏矩阵的加法十字链表_数据结构学习(C )稀疏矩阵(十字链表1)

    CSDN 先说说什么叫稀疏矩阵. 你说, 这个问题很简单吗, 那你一定不知道中国学术界的嘴皮子仗, 对一个字眼的"抠"将会导致两种相反的结论.这是清华 2000 年的一道考研题:& ...

  5. noj数据结构稀疏矩阵的加法十字链表_一个算法毁了一款好游戏?算法和数据结构到底有多重要?...

    来源 | 异步 | 文末赠书 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多 ...

  6. 数据结构稀疏矩阵的加法十字链表_学习数据结构和算法的框架思维

    ----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...

  7. noj数据结构稀疏矩阵的加法十字链表_数据结构之:图

    导读 1. 什么是图?图的存储方式? 2. 图的遍历(深度优先搜索,广度优先搜索) 3. 最短路径 1. 什么是图?图的存储方式? 前面总结了"树"这种数据结构,而这篇博客总结的是 ...

  8. 数据结构常用的七种排序算法总结

    前言 排序算法在数据结构里属于最为重要的一部分,例如我们熟悉的冒泡.选择.插入.归并等,这些当初在第一次学习的时候,并没有很好的掌握,现在因为在备战考研,刚刚进行完数据结构的一轮简单复习在开始整理一轮 ...

  9. 数据结构包括哪几种基本结构,各有什么特点

    今天参加一个小考试,就是考的这一题,我竟然忘得很干净,拿出来数据结构书,再看一下. 数据结构----书上给的概念是:相互之间存在一种或多种特定关系的数据元素的集合.简单的就是:数据及数据之间的关系. ...

最新文章

  1. CSS之布局(行内元素的盒模型)
  2. JavaScript初阶(二)
  3. 华为开源构建工具_5个开源工具可快速构建地图应用
  4. python基础之异常处理、面向对象
  5. Sharepoint 弹出消息提示框
  6. python如何计算超大整数_Python 实现大整数乘法算法
  7. swt中关于Text.setSelection()的记录
  8. 感觉最近有多个机器人给吾博客评论
  9. linux环境下刷机9008,LINUX下线刷修复变砖手机
  10. sap新手学习第一天
  11. 计算机前摄像头怎么录视频教程,电脑摄像头录制视频_电脑摄像头录像怎么录...
  12. android 渐变歌词,Android UI之自定义——最简单的仿QQ音乐歌词颜色渐变
  13. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
  14. TCP紧急模式理解心得
  15. 推荐个echarts网站
  16. 一个优秀的商业分析师是如何炼成的
  17. 九州海上牧云记,电视剧节奏太慢?教你如何看全集
  18. 【HDU 6608】Fansblog(威尔逊定理+逆元+快速乘+快速幂)
  19. English trip EM3 LP 4B Home Design Relationship Teacher:Ryan
  20. 嵌入式linux包含哪些内容

热门文章

  1. 线程的几种状态_拜托:不要再问我线程有多少种状态了
  2. 在win8上配置网站服务器,win8怎么配置web服务器地址
  3. C语言标量变向量的函数,GLSL 详解(基础篇)
  4. 华为鸿蒙15日上市,华为鸿蒙什么时候上市
  5. 加ing形式的单词有哪些_高中英语人教版必修5知识研习Unit4重点单词treat
  6. 成功解决import win32api, sys, osImportError: DLL load failed: 找不到指定的模块。
  7. Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略
  8. CV:计算机视觉技术之图像基础知识(二)—图像内核的可视化解释
  9. AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛—13:30-14:10山世光教授《从看脸到读心:基于视觉的情感感知技术》
  10. 成功解决Remix Mock compiler: Source not found