数据结构到底该怎么学?

网友提问:

数据结构到底该怎么学?

Yt回复:

一、数据结构是必过的关

数据结构,是每一个计算机相关专业的朋友必须过的关。

不管是严蔚敏严老那本书,还是《算法导论》,里面讲的数据结构,作为一个计算机相关专业的学生,这是一个必过的槛。

就像考驾照、参加高考一样,每个人必须都得参加。

数据结构,就是这样的存在。

二、我是怎么学数据结构的

我讲讲我曾经是怎么学的。但我的方法不一定和你类似。

在我们那个年代,网上连现成的队列、栈、链表的代码都没有。

我当时是看严蔚敏严老那本教材,从链表开始,到双链表、环形链表、队列、栈,然后到树——二叉树、二叉平衡树、哈夫曼树、234树、红黑树,再到后面的图——深度优先、广度优先、Dijkstra、Prim……

这些,我都是自己亲手实现过的。

每一行代码,都是自己敲出来的。

三、自己实现一遍,你会得到什么?

我认为这个过程,你要把数据结构学好,至少你要自己实现一遍。

实现出来之后,你会得到至少两个好处:

好处一:告别语法问题

你把数据结构都实现完以后,你将不会对语法有任何疑问。

不管你是选择C、C++还是Java——你实现一遍之后,这门语言的语法,你不可能再有任何疑问。

你不会因为链表这种基础数据结构而不懂。

指针、数组、函数指针……你基本上都会很熟悉。

因为实现一遍下来,大概的代码会有五六千行,五千行以上。

这五千行代码敲完,你就将彻底告别语法问题。

好处二:驾轻就熟地选择数据结构

你会得到第二个东西:所有的数据结构,在哪个场景怎么用,你都会能够驾轻就熟。

你本能里面就能够输出:

  • 这个东西一听,大概用链表可以
  • 这个东西用队列可以
  • 这个东西用树好像可行

因为数据结构学完之后,它才是一个刚刚的起点。数据结构将会伴随着你整个职业生涯。

遇到一个场景,你会本能地反应:

  • 这个地方我可以用队列
  • 这个地方我可以用红黑树
  • 这个地方我可以用图

因为你实现过,你就知道哪个数据结构适合哪个场景,你就会驾轻就熟地能够去使用它。

四、如果你没有自己实现过,你会缺失什么?

如果你没有实现过数据结构,我认为你会缺失两样东西:

第一:你会有很长一段时间困惑——“我学完C语言了,我会干什么?”你被语法本身困住,走不出来。

第二:后面你做很多事情的时候,对于数据结构的理解是有缺陷的。别人说用什么,你就只能用什麼。时间复杂度、空间复杂度,你是理不清楚的。

五、怎么学?动手实现一遍

我个人认为,还是那种——你自己去跟着动手实现一遍。

即使现在有AI了,我依旧要求你实现一遍。

当然,你在调试代码的时候,可以用AI给予你一些思想上的帮助。

我记得当时我在实现红黑树的时候,删除这个动作在《算法导论》那本书里,只给出了:

  • 添加的伪代码
  • 定义红黑树的伪代码
  • 左旋的伪代码
  • 右旋的伪代码
  • 三种插入情况的伪代码

对于四种删除的情况,是没有代码的。

当时删除这个过程,我是自己梳理、自己写的。在这个过程中,但凡有一点不对,它就运行不起来——core dump、段错误……你得硬着头皮上。

我们当时是没有AI来帮忙解的。

六、现在有条件了,更要动手

我认为现在,任何一个数据结构本身,都不会成为很难的点。因为很多东西都有现成的,网上一搜一大把。

但是——这个过程你一定要自己梳理一遍。

所有的数据结构,自己实现一遍,对你后面做开发,我认为还是很有益处的。

现在的条件比我们当年好太多了。有AI帮你调试、帮你解释概念,你更应该抓住机会,亲手把每一行代码敲出来。

数据结构这条路,没有捷径。

动手,就对了。

全部评论

相关推荐

04-11 09:51
算法工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务