数据结构和算法-稀疏数组转原始数组|学习笔记

简介: 快速学习数据结构和算法-稀疏数组转原始数组

开发者学堂课程【Go 语言核心编程 - 数据结构和算法:数据结构和算法-稀疏数组转原始数组】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/627/detail/9830


数据结构和算法-稀疏数组转原始数组

 

内容简介:

一、思路分析

二、代码实现

 

一、思路分析

恢复的时候直接去遍历文件,这个文件遍历一行就往里面扔一行,遍历一行就写一行,那么这个时候,因为没有去存盘,所以这简单的就直接从稀疏数组把它返回回来,待会要代码实现的时候,下图可供参考,

如下:

 image.png

 

二、代码实现

(1)稀疏数组转原始数组代码实现及运行结果

先找到之前写代码的位置,即打开 chapter20/sparsearray/main.go文件,接着在最后一行中输入代码,如下:

//将这个稀疏数组,存盘 d:/chessmap.data

//如何恢复原始数组

//1.打开这个 d:/chessmap.data => 恢复原始数组

//2.这里使用稀疏数组恢复

//先创建一个原始数组(这个数组规模大小怎么去做?标准的写法应该先读出它的数据,然后根据其两个数据,也就是根据存进去的这个11和那个11来决定原始数组的行和列,但是刚才已经讲过了,在 Go 语言中,在创业的时候,必须直接指定这个具体的数字,所以可以先做个切片,用切片来恢复就行了,这里就直接就写到这里)

var chessMap2 [11][11]int

//遍历 sparseArr[遍历文件每一行]

for _, valNode := range sparseArr {

chessMap2[valNode.row][valNode.col] = valNode.val

}

//看看 chessMap2 是不是恢复

fmt.Println(恢复后的原始数组......)

for _, v := range chessMap2

for _, v2 := range v {

fmt.Printf(%d\t, v2)

}

fmt.Println()

}

}

代码运行结果为:

image.png

(2)对以上代码运行结果的分析及改进

运行结果显示有问题,它说chessMap2[valNode.row][valNode.col] = valNode.val“有问题,这边有一个数组越界那么为什么出了问题?

是因为原先的数组里面,它记录11110这个其实目前没什么用处,这种情况来说没用,得跳过这个因为它是代表的你有几行几列的原始数据,将来的价值在什么地方?

别人如果问到,面试官问到你第一行的十一十一零是什么这个十一十一是用来确定将来二数组开多大这才有用,但是在 Golang 中,对二维数组来说,这两个数据它跳过去就行了,怎么跳?

非常简单,将以上部分的代码修改为以下代码:

//遍历 sparseArr [遍历文件每一行]

for i, valNode := range sparseArr {

if i != 0 {  

//跳过第一行记录值

chessMap2[valNode.row][valNode.col] = valNode.val

}

}

再来运行一遍以上代码,执行结果为

如下:

image.png

可以上图中,看到中间过渡是很清晰的,一个是原始的数组,一个是稀疏的数组,最后恢复过后,又变成了数字,当然具体的情况还要具体分析

(3)小结

如果想去用一个切片来做,也可以,可以把它改成一个切片去尝试做一做这里面的关键点不是讲是不是切片的问题关键点是在讲解一种思想数据结构它其实是一种算法的一个底层,它讲的是一种思想,就是告诉大家以后遇到一种类似有大量的重重复数据的问题,怎么去解决的思路.

(4)作业

关于稀疏数组的概念,

有以下两点要求:

①将构建的稀疏数组存盘 chessmap.data 。

在恢复原始二维数组,要求此文件 chessmap.data 读取。


相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
79 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
2月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
35 4
|
2月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
22 0
数据结构与算法学习十四:常用排序算法总结和对比
|
2月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
2月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
23 0
|
24天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
114 9
|
15天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
22 1
|
2天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
20 5
|
18天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
21天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
下一篇
无影云桌面