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

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

开发者学堂课程【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 读取。


相关文章
|
16天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
27 1
|
19天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
63 4
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
91 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
17天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
17天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
25天前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
86 23
|
25天前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
57 20
|
17天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
38 5
|
16天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
42 1
|
25天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
44 4

热门文章

最新文章