五分钟学编程:如何学好数据结构与算法?程序员黄小斜

学习编程,数据结构是你必须要掌握的基础知识,那么数据结构到底是什么呢?

根据百度百科的介绍,数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

听听这是人话么,我帮你们翻译一下,其实数据结构就是用来描述计算机里存储数据的一种数学模型,因为计算机里要存储很多乱七八糟的数据,所以也需要不同的数据结构来描述。

了解了基本概念之后,接下来我们再来看看,为什么我们要学习数据结构呢?

在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。

许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。

选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。

也就是说,选定数据结构往往是解决问题的核心,比如我们做一道算法题,往往就要先确定数据结构,再根据这个数据结构去思考怎么解题。

如果没有数据结构的基础知识,也就没有谈算法的意义了,很多时候即使你会使用一些封装好的编程api,但你却不知道其背后的实现原理,比如hashmap,linkedlist这些Java里的集合类,实际上都是JDK封装好的基础数据结构。

我第一次接触数据结构这门课还是4年前,那这时候我在准备考研,专业课考的就是数据结构与算法,作为一个非科班的小白,对这个东西可以说是一窍不通。

这个时候的我只有一点点c语言的基础,基本上可以忽略不计,所以小白同学也可以按照这个思路进行学习。

数据结构基本上是考研的必考科目,所以我一开始使用的是考研的复习书籍,《天勤数据结构》和《王道数据结构》这两个家的书都是专门为计算机考研服务的,可以直接百度,这两本书对于我这种小白来说居然都是可以看懂的,所以,用来入门也是ok的。

最早的时候我并没有直接看书,而是先打算先看视频,因为视频更好理解呀,找视频的办法就是百度,于是当时找到的最好资源就是《郝斌的数据结构》这个视频应该是很早之前录制的了,但是对于小白来说是够用的,特别基础,讲的很仔细。

从最开始的数组、线性表,再讲到栈和队列,以及后面更复杂的二叉树、图、哈希表,大概有几十个视频,那个时候正值暑假,我按照每天一个视频的进度看完了,看的时候还得时不时地实践一下,更有助于理解。

好在大部分题目是有讲解的,看完讲解之后还能安抚一下我受伤的心灵。记住这本书,我在考研之前翻了至少有三四遍。

完成了第一波视频+书籍的学习之后,我们应该已经对数据结构有了初步的了解了,对一些简单的数据结构算法也应该有所了解了,比如栈的入栈和出栈,队列的进队和出队,二叉树的先序遍历和后续遍历、层次遍历,图的最短路径算法,深度优先遍历等等。

有了一定的基础之后,我们需要对哪方面进行强化学习呢?

当然,我当时主要是复习考研,所以还是针对专业课的历年真题来复习,像我们的卷子中就考察了很多关于哈希表、最短路径算法、KMP算法、赫夫曼算法以及最短路径算法的应用。

对于考卷上的一些知识点,我觉得掌握的并不是很好,于是又买了《王道数据结构》以及一些并没有什么卵用的书回来看,再次强化了基础。

于是我又在网上搜到了另一个系列视频《小甲鱼的数据结构视频》里面除了讲解数据结构之外,还讲解了更多经典的算法题,比如八皇后问题,汉诺塔问题,马踏棋盘,旅行商问题等,这些问题对于新手来说真的是很头大的,使用视频学习确实效果更佳。

纸上得来终觉浅,绝知此事要躬行。众所周知,算法题和数学题一样,需要多加练习,而且考研的时候必须要手写算法,于是我就经常在纸上写(抄)算法,你还别说,就算是抄,多抄几次也有助于理解。

很多基础的算法,比如层次遍历,深度优先遍历和广度优先遍历,多写几遍更有助理解,再比如稍微复杂一点的迪杰斯特拉算法,不多写几遍你可真记不住。

除了在纸上写之外,更好的办法自然是在电脑上敲了,写Java的使用Java写,写C++的用C++写,总之用自己擅长的语言实现就好,尴尬的是我当时只会c,所以就只好老老实实地用devc++写简单的c语言程序了。

至此,我们也算是学会了数据结构的基础知识了,至少知道每个数据结构的特性,会写常见的数据结构算法,甚至偶尔还能掏出一个八皇后出来。

《天勤数据结构》《王道数据结构》如果你要考研的话,这两本书可不要错过

严蔚敏《数据结构C语言版》这本书是大学本科计算机专业常用的教科书,年代久远,可以看看,官方也有配套的教学视频

《大话数据结构》官方教材大家都懂的,比较不接地气,这本书对于很多新手来说是更适合入门的书籍。

《数据结构与算法Java版》如果你是学Java的,想有一本Java语言描述的数据结构书籍,可以试试这本,但是这本书显然比较复杂,不适合入门使用。

《郝斌数据结构》这个视频上文有提到过,年代比较久远,但是入门足够了。

《小甲鱼数据结构与算法》这个视频比较新,更加全面,有很多关于经典算法的教程,作者也入驻了B站,有兴趣也可以到B站看他的视频。

以上资源都可以免费领取,在我的公众号【程序员黄小斜】回复“数据结构”即可免费领取对应的资料目课、面试课等内容。

THE END
1.算法笔记(三)算法学习技巧1.如何总结各个算法? 首先找出各个算法自己的主要特性,拿出来之后去和其它算法比较,时间复杂度和空间复杂度相互比较,这是建立知识之间联系的一个过程,其次,也要拿出他们的共同点、共同之处,使他们联系更紧密。 2.三遍读书方法? 第一遍快速阅读一遍(在n+1)基础之上,第一遍是为了了解全书内容,让自己有一个把握,https://www.code456.com/article/3598351.html
2.从啥也不会的小白,如何成为合格的算法工程师?算法工程师之前有一个小伙伴在留言当中问我,说自己想要从事算法工程师的工作,但是不知道应该从哪里入手,请问我应该怎么办。 这其实是一个老生常谈的话题,也是一个很大的概念。我很难用三言两语告诉你究竟应该如何做,但我可以告诉你一个合格的算法工程师应该至少需要具备什么样的能力,也许可以帮助你们找到前进的方向。 基础 https://aiqicha.baidu.com/qifuknowledge/detail?id=10100085880
3.人工智能算法的分类与应用人工智能 (AI) 是当前科技领域的热门话题,其核心是各种算法的灵活运用。AI算法不仅实现了智能预测、分类,还在数据挖掘、自然语言处理和推荐系统等领域发挥着重要作用。接下来,我们将以科普的视角,带您深入了解 AI 的主要算法及其广泛应用。 一、监督学习 https://mp.weixin.qq.com/s?__biz=MzI3MzQ1NjMwOA==&mid=2247549220&idx=4&sn=25aa18da4b1e2824371e552b0ca3c8e6&chksm=eb214cffdc56c5e9303367ae4087102996613151dfa3c11fafe88950b683dbc8dadedd63bcaa&scene=27
4.我是如何成为算法工程师的,超详细的学习路线如果时间充裕,推荐先学好数学基础。如果时间不够,那就跳过数学基础部分,学算法的时候,哪里不会补哪里。 2、编程能力 编程语言,需要至少掌握两门, Python 和 C++。 工作中,Python 主要用于处理数据、算法调研、模型训练的工作,而 C++ 则是负责工程落地。 https://blog.csdn.net/qq_29462849/article/details/118159648
5.C语言数据结构的时间复杂度和空间复杂度C语言2.什么是算法? 算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果通俗来说:二分查找,冒泡排序等等都为算法 3.如何学好算法和数据结构 https://www.jb51.net/article/280489.htm
6.北师大二年级数学下册教学计划(精选15篇)二、加强估算,鼓励算法多样化 估算在日常生活中有着十分泛的应用,在本册教学中,教师要不失时机地培养学生的估计意识和初步的估算能力。例如:在估计一筒花生在多少粒;估计一篇文章有多少字;进行万以内加减法计算时,先估计得数的大致范围再进行计算;在学习测量时,先估计测量的物体有多长,再实际测量。这样做,有利于学https://www.unjs.com/jiaoxuejihua/202102/3169309.html
7.即将到来的算法革命,让孩子学好数学迟早有一天,我们将通过计算解决一切问题。如果投资这件事指的是投资未来,那么从现在开始关注一切和算法相关的事情就并不为过,至少,你可以让孩子在一个新的意义上学好数学。语言是社交的工具,算法则是他和机器打交道的工具。 AI,也就是人工智能,以算法为基础。看一个有趣的报道,法国圣母大学的研究人员最近开发出https://laoyaoba.com/html/share/news/619312?source=app_android_v2
8.《算法与数据结构》精品课:线上线下融合,师生协力共创编程教学新(更多博客推文可关注公众号“SIST算法与数据结构”或访问课程主页https://smart.sist.shanghaitech.edu.cn/cs101/进行查看) 学好这门课的秘诀? 学好一门课程,需要脚踏实地进行学习与反思,没有捷径可走。但是有一些学习建议,可以帮助同学们更好地学习和理解这门课程。 https://sist.shanghaitech.edu.cn/_t335/2023/1205/c2858a1086548/page.htm
9.算法岗还是工程岗?关于职业选择的一点小思考职业发展以机器学习平台研发工程师-Data进行举例,首先你至少要精通或者熟悉一门编程语言(重点,不要贪杯),其次就是数据结构与算法要学好(这里所谓的学好并不是说你在某某平台刷了多少题,更重要的是要了解算法在生活中的应用场景,比如对于栈这种数据结构,大家在学校里可能就只知道栈可以解决括号匹配问题,但你是否知道你在日常https://ac.nowcoder.com/discuss/995242?type=9&order=0&page=1
10.算法简单学习(一)——前言如何学习算法 算法的学习是一个循序渐进的过程,这主要有两个方面的因素。 其一是计算机相关基础知识是否扎实。 其二是思维逻辑的强化和算法实践需要时间。 如果要学习算法,找到合适的书籍是很重要的,比较推荐算法导论这本书,下面会给出这本书的链接大家可以买或者在网上找电子免费版。 https://www.jianshu.com/p/f74f4ef33e93
11.编程竞赛宝典C++语言和算法入门首先,算法(Algorithm)一词源于算术(Algorism),具体地说,算法是一个由已知推求未知的运算过程。后来,人们把它推广到一般过程,即把进行某一工作的方法和步骤称为算法。一个程序要完成一个任务,其背后大多会涉及算法的实现,算法的优劣直接决定了程序的优劣。因此,算法是程序的“灵魂”。学好了算法,就能够设计出更加优异https://www.epubit.com/bookDetails?id=UB77a9ce8133887
12.“一个人连基本的算法都掌握不了,他肯定成不了优秀的程序员优秀的小伙伴都知道,学好算法与数据结构, 不单单是为了应付技术面试的需要,更重要是提升自身编程水平。 那么程序员到底需不需要精通算法呢? 首先,一个出色的程序员并不一定要精通算法,毕竟发展的方向很多。 但是,一个人连基本的算法都掌握不了,他肯定成不了优秀的程序员。 https://www.imooc.com/article/details/id/254516
13.代码随想录——跟着Carl学算法图书1.1 面试官为什么要考查算法 1 1.2 编程语言 2 1.2.1 学好算法之前更要学好编程语言 2 1.2.2 代码规范 2 1.3 如何写简历 5 1.3.1 简历模板 5 1.3.2 谨慎使用“精通” 5 1.3.3 拿不准的内容绝对不要写在简历上 5 1.3.4 项目经验应该如何写 6 http://www.broadview.com.cn/book/6500
14.算法分析入门教程实战篇及应用篇没错。要学好算法分析,必须要有一个好习惯。否则事倍功半。学破解的好习惯(也是做CRACK ME 的好习惯): 1.坚持独立完成破解(CRACK ME)。贵在坚持。开始时很吃力,成果也不明显。没关系。万事开头难,坚持。 2.独立地查找相关资料并研读,弥补自己的弱项。案头常备基础破解教材查询是绝大多数破解高手的好习惯。很https://www.pediy.com/kssd/pediy10/59537.html
15.代码随想录——跟着Carl学算法先后在腾讯和百度从事技术研发工作多年,对数据结构和算法有深刻理解。CSDN博客专家,各大OJ刷题总计过千题。公众号:代码随想录,目前有8w+垂直程序员粉丝。 章 准备面试要知己知彼 1.1 面试官为什么要考查算法 1.2 编程语言 1.2.1 学好算法之前更要学好编程语言 1.2.2 代码规范 1.3 如何写简历 1.3.1 简历模板 http://www.96192.com/product/detail/900082
16.labuladong的算法小抄(豆瓣)第1章列举了几个最常见的算法类型及对应的解题框架思路,包括动态规划、回溯、广度优先搜索及双指针、滑动窗口等算法技巧。 第2章用动态规划的通用思路框架解决了十几道经典的动态规划问题,例如,正则表达式、背包问题,同时还介绍了如何写状态转移方程、如何进行状态压缩等技巧。 第3章介绍了数据结构相关的算法,例如,二https://book.douban.com/subject/35252621/