纯干货|数据结构到底怎么学?看这篇就够了!

301 阅读6分钟

不废话,先上本文思维导图:


数据结构是什么?

数据结构(Data Strcture),是计算机中存储、组织数据的方式,目的是使得数据能被更高效的使用

数据结构从逻辑上将数据进行有效的组织,使得我们能高效的使用数据、持久化数据、或共享数据,他们提供了一种描述数据元素是如何组织的通用模型。常见的数据结构就有很多种,不同的数据结构都有各自应用的场景。


为什么要好好学习数据结构?

数据结构是众多复杂应用的基石。

数据结构的应用场景很多,下面是一些典型的场景:

●存储数据(数据库)

●资源管理(操作系统)

●数据交换(TCP/IP)

●排序(如二叉树)

●索引(B树在数据库中的使用)

●搜索

●伸缩性(大型数据应用使用数据结构来在分布式节点之间分配和管理数据存储,提高伸缩性和性能。如Spark使用数据结构映射底层数据的结构来简化查询)


数据结构的分类

数据结构经常根据其特性来进行分类:

线性/非线性。是指数据是否按照顺序方式组织。如数组是以顺序方式组织,而图则不是。

同构/异构。是指数据的类型是否相同。

静态/动态。静态的是指在编译的时候就有了固定的大小、结构和内存。动态的是指在使用过程中会这些信息会变化。

数据结构是算法和程序的基石,而数据类型则是数据结构的基石。

下图展示了数据类型和数据结构的关系:


典型数据结构

(1)数组。内存上相邻存放,各数据元素的数据类型均相同。

(2)。以操作的顺序线性存放,顺序可以是LIFO(后进先出)、FIFO(先进先出)。

(3)队列。和栈类似,但是顺序只能是FIFO。

(4)链表。数据之间通过指针相连。

(5)。以分层的方式组织数据,每个节点包含数值、与父节点和子节点相连。

二叉搜索树:

(6)。基于树的数据结构,其父节点的值要么比孩子节点全部小,要么比孩子节点的值全部大。

如下图是一个小根堆:

(7)。非线性的方式组织数据,包含点和边。

(8)Trie:前缀树或字典树。是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。

(9)hash table。哈希表以键值的方式来存储元素,也就是说每个数据都是以键值(key,value)的方式存储的,关键字(key)是不可重复的,而值是对应于键的。我们可以把哈希表简单理解为一本字典,每个键(key)是一个单词,而每个单词都有自己对应的解释,也就是值(value)。


如何学好数据结构?

个人认为较好的数据结构学习路线是如下几个阶段:

  • 入门。目的在于了解有哪些数据结构?分别是什么?
  • 编程实现。动手编程实现它,理解它对数据的组织,各种操作,时间复杂度和空间复杂度分析。
  • 实际应用

第一阶段:入门

入门首先要选择一本合适的书籍。我本人不推荐上来就读大块头的书籍,这样很容易打击初学者的自信心。

这里推荐一本 《大话数据结构》 ,作者以幽默风趣的风格来讲述数据结构和算法,相对而言不会很枯燥非常适合入门。

书中给出了很多图表、动效课件以及非常多的代码实现,非常利于理解。

如下图是描述栈的操作的示意图:

除了看书,配套看看视频课程会更有体感,入门的话这里推荐浙江大学陈越&何钦民教授的《数据结构》课程:

www.icourse163.org/course/zju-…

这门课的习题可能还是有点难度的,大家可以先听课程,掌握各种数据结构的基础知识,习题可以放在第二阶段来做。

第二阶段:进阶&编程实现

入门之后,就可以进入进阶学习阶段了,在这个阶段,我们需要掌握每种数据结构的数据组织原理、各项操作、以及能够动手编程实现、并分析其时间复杂度和空间复杂度

关于书籍,这里推荐 《算法》 ,豆瓣评分9.4分,Amazon评分4.7星。

这本书的知识面全,给出了大量图解、有配套网址和课程、习题以及详尽的解答。

在我上大学本科学习数据结构的时候,为了方便理解数据结构的原理、各种操作的实现,只能用笔在纸上画,非常不方便

后面发现居然有如此好用的数据结构可视化工具,只能用相见恨晚来形容。

这里为大家挑选了2个非常好用的可视化网站,在这里大家能够很直观的观察数据结构的演变、各项操作的实现,加深理解。

(1)visualgo:visualgo.net/zh

(2)Data Structure Visualizations:

www.cs.usfca.edu/~galles/vis…

第三阶段:实际应用

①如何选择使用什么数据结构?

除了掌握对数据结构的使用,如何在不同应用场景下选择合适的数据结构更加重要,在做选择时我们通用要考虑如下因素:

●我们要存储什么信息?

●信息如何被使用?需要支持哪些操作

●数据如何被持久化/保存?计算复杂度是什么样的?

②实战平台推荐

那么,如何通过实践来应用数据结构呢?

(1)公开课习题

比较推荐的是《算法》的coursera公开课:

www.coursera.org/learn/algor…

(2)leetcode

leetcode-cn.com/

leetcode上面提供了非常多的习题,还有网友总结的思路。

这里推荐一个专门的数据结构学习计划:

leetcode-cn.com/study-plan/…

(3)剑指offer

汇总了互联网大厂面试常见的考题:

leetcode-cn.com/leetbook/de…

以上就是学长的全部分享,怎么学数据结构现在应该有头绪了吧!

这样的干货分享大家觉得怎么样,有什么建议或者问题欢迎留言哦~