数据结构到底该怎么学?

网友提问:

数据结构到底该怎么学?

Yt回复:

一、数据结构是必过的关

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

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

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

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

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

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

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

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

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

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

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

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

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

好处一:告别语法问题

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

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

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

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

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

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

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

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

你本能里面就能够输出:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

动手,就对了。

全部评论

相关推荐

主包从3月初开始投的简历,最开始面的部门是IEG,然后二面的时候挂掉了,后面又被微信搜索给捞了,结果一面的时候又挂了,后面又被广州的WXG给捞过去了。没错,主包一共经历了六轮面试,好在最后的结果是很好的.......一面(1h左右)- 自我介绍- 拷打在美团的实习(占比很大)- 项目(占比很少)- 八股(cpp + OS + 计网 + 数据库 + rabbitMQ + redis)关于八股这块,MySQL底层问的比较多,其次就是cpp的继承和多态这块儿,中间件也问了些。- 手撕两道算法:最长无重复子串 + 交换链表中的结点二面(1h左右)- 自我介绍- 拷打两段实习:美团,以及一家中厂的实习经历(同样占比很大)- 少量八股(OS + 数据库 + LangChain + docker + cpp)关于八股这块,同样 OS 和 数据库问的比较多,其他就是简历上写的一些小点- 手撕两道算法 + 一道SQL优化:每m个结点反转单链表 + 合并两个有序数组,SQL优化的话,就是加索引(具体我搞忘了)- 反问:部门情况,目前负责的业务。- 最后面试官说还会加一场技术面。三面(50来分钟)- 问实习:美团 + 中厂实习的情况。- 科研情况、实验室方向、读研生活、个人爱好等等。- 三面没有八股和手撕,除了实习问的比较多,其实就是一些个人的学习情况,以及怎么学习技术的...等等。- 反问:组内业务、入职需要做什么(面试官讲的很详细,应该是大Boss)HR面(半小时)- 自我介绍- 家是哪儿的- 平时怎么学习的- 看你是28届的,为什么想这么早来实习?- 导师放不放实习- 在这三段实习中,有没有印象最深刻的?那位实习导师对你的帮助很大?- 有无直系亲属在鹅工作?- 其实就是为什么考研?如何平衡工作与个人学习?- 等等之类的话题,比较轻松,就像是在聊天一样。- 最后说的是周五之前出结果。总结主包一共有过三段实习经历(两段中厂 + 一段大厂),所以面试官更多的是在问实习期间做的事情,解决了什么问题之类的。八股和项目也有在问,但是问的没有实习那么多。除开美团,这是主包面的第二个大厂,虽然有点波折,但还是比较顺利。我个人认为,目前就业竞争比较大,越早实习越好,其次就是如果你本身已经有了 1~2 段大厂实习,那么约面的机会真的很大。字节、京东、滴滴都给了面试机会的,但是字节我挂了,然后京东和滴滴拒了,俗话说:有鹅选鹅嘛😂
查看24道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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