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

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

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

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

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

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

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

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

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

如果没有数据结构的基础知识,也就没有谈算法的意义了,很多时候即使你会使用一些封装好的编程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.五分钟学算法五分钟学算法浏览人数已经达到0,如你需要查询该站的相关权重信息,可以点击"5118数据""爱站数据""Chinaz数据"进入;以目前的网站数据参考,建议大家请以爱站数据为准,更多网站价值评估因素如:五分钟学算法的访问速度、搜索引擎收录以及索引量、用户体验等;当然要评估一个站的价值,最主要还是需要根据您自身的需求以及需要https://www.colabug.com/sites/13534/
2.有哪些高质量的自学网站?25、五分钟学算法(http://cxyxiaowu.com/) 一个完全免费的算法学习网站。 有很多的算法题和概念解释,甚至面试的攻略,适合新手的学习和进阶。 漫画式的教学,将复杂的内容深入浅出,效果很棒! 26、菜鸟教程(http://runoob.com/) 正如其名,非常适合新手的编程技术网站。 https://www.douban.com/note/767851363/
3.五分钟学算法链接直达手机查看 GitHub 42000 Star,全球排名 79 。小吴讲算法,图解面试算法,来和程序员小吴一起学算法吧,学习如何刷力扣(LeetCode),掌握如何学习数据结构。五分钟学算法官网,一个算法学习的网站,图解力扣算法,看动画,刷力扣,备面试,跳槽涨薪美滋滋。https://www.toolmao.com/sites/1338.html
4.五分钟学算法个人介绍 公众号【五分钟学算法】个人网站:https://www.cxyxiaowu.com 他关注的专题/文集/连载 他喜欢的文章 他创建的专题 LeetCodeAnimation 五分钟学算法 在PPT动画中学算法 从零开始学Swift 他的文集 日记本 新媒体管家发布 五分钟学算法 Python https://www.jianshu.com/u/c6ad3f2ed2d6
5.吴师兄学算法五分钟学算法吴师兄学算法(www.cxyxiaowu.com)提供许多数据结构与算法学习的基础知识, 涵盖 LeetCode 题解、剑指 Offer 题解、数据结构等内容。https://www.cxyxiaowu.com/
6.五分钟学算法青少年人工智能资源与创新平台五分钟学算法授课教师:王晓茹价格免费学习有效期 长期有效 免费加入 简介 学习目录简介 缜密的思维,形象的语言,妙绝的思路,再难的算法,也能信手拈来,娓娓道给你听! 王晓茹,博士,任教于北京邮电大学计算机学院,副教授、硕士生导师。曾在美国MIT(麻省理工学院)和美国PSU(波特兰州立大学)访问学习。现任中国人工智能https://yuanzhuo.bnu.edu.cn/goods/show/33
7.全网最全程序员学习网站汇总,还不赶快收藏地址: 五分钟学算法 简介:有少量非常不错的数据结构、算法相关的内容。 推荐指数:? 13、犬小哈教程网 地址: 犬小哈教程网 简介:少量哈士奇的技术问答漫画很有意思。 推荐指数:? 15、原创技术大联盟 地址: 原创技术大联盟 简介:优秀的技术博主实在太多了,列不完,也看不完,这里有一个导航页https://www.songma.com/news/txtlist_i66992v.html
8.每天五分钟机器学习:聚类算法中经常使用的肘部法则是什么?如何选择聚类的数目K,也就是说我们要将数据聚成几簇。我们可以通过可视化的方式(画图),或者聚类算法的输出结果(试一试)来手动的决定聚类的数目,或者根据实际需要来确定我们想要聚成几簇,比如前面的衣服问题。 肘部法则 对于肘部法则,我们所需要做的是改变 k 值,也就是聚类类别的数量。我们对不同的k来计算代价函数,https://download.csdn.net/blog/column/10047693/128174719
9.算法五分钟算法小知识:学习数据结构和算法的框架思维收藏 https://developer.aliyun.com/ask/283137
10.吴师兄学算法五分钟学算法吴师兄学算法 (www.cxyxiaowu.com) 专注于提供数据结构与算法学习的基础知识,涵盖 LeetCode 题解、剑指 Offer 题解、数据结构等内容。它是一个非常有用的资源平台,特别适合那些希望提高编程技能和算法理解能力的学习者。 吴师兄学算法-五分钟学算法_致力于让每个小白都能看懂每一道算法题 https://pidoutv.com/sites/27782.html
11.分数混合运算教学设计(精选7篇)本节课主要是让学生在自学指导的指引下进行自学,在自学过程中,重点解决分数乘除混合运算的问题,“送给幼儿园多少顶帽子”,这个问题实质上是先求“6米里有几个2/5米(即一共制作了多少顶帽子)”,再求“15的2/3是多少”,由于学生前面已经学过求一个数的几分之几是多少,已经有了一定的'基础,因此在解决这一https://xiaoxue.ruiwen.com/jiaoxuesheji/184931.html
12.BoostKit大数据业界趋势鲲鹏大数据组件增强特性和典型配置鲲鹏BoostKit CDN使能套件聚焦CDN开源组件可用性和CDN缓存节点吞吐量低、时延大等问题,提供CDN主流组件的开源使能和性能调优指南,通过使能鲲鹏处理器内置的RSA加速引擎,对RSA2048算法进行硬件卸载,同时提供了NUMA优化等手段,以便充分发挥鲲鹏处理器多核优势,助力客户CDN缓存节点提供更大吞吐量,实现更低时延。 https://developer.huawei.com/consumer/cn/blog/topic/03898238728230088
13.五分钟弄懂有点难度的排序:堆排序腾讯云开发者社区Go代码实现 Java代码实现 Python代码实现 JavaScript代码实现 如果你是iOS开发者,可以在GitHub上https://github.com/MisterBooo/Play-With-Sort-OC获取更直观可调试运行的源码。 你可以在公众号 **五分钟学算法** 获取更多排序内容。https://cloud.tencent.com/developer/article/1366827
14.七年级数学上册《有理数的混合运算》教案(精选5篇)[师]我们已学过哪种运算? [生]乘方、乘、除、加、减五种;复习各种运算的法则; 例计算: ①②(教师板书) ③④(学生计算) 二、混合运算举例。 1.(生口答)下列计算错在哪里?应如何改正? (1)74-22÷70=70÷70=1 (2)(-112)2-23=114 -6 = -434 https://www.unjs.com/jiaoan/shuxue/20190406082153_1953710.html
15.初中数学平均数说课稿(通用7篇)学生经过以上五个环节的学习,已经初步掌握了算术平均数、加权平均数的计算和确定方法,有待进一步提高认知水平,因此我针对学生素质的差异设计了有层次的训练题,其中包括了必做题和选做题,留给学生课后自主探究,这样既使学生掌握基础知识,又使学有余力的学生有进一步发展的空间和余地,这样也充分反映了新课改的精神,就是https://www.yjbys.com/shuokegao/chuzhong/3465388.html
16.leetcode算法题目动画解析文章最新首发于微信公众号 吴师兄学算法,您可以关注获取最新的文章。 为了帮助大家更好的入门学习算法,经过半年的积累,我给大家整理了《剑指 Offer》系列的四十道题目,都是算法面试的高频题目,每一道题目我都提供详细的分析、精美的配图、易于理解的动画视频,适合那些第一次刷题的同学,当然,也适合重复刷题的老手再次https://github.com/MisterBooo/LeetCodeAnimation
17.深度解读《原则》:掌握更高次的思考方式接下来我们来讨论,我们从达利欧的人生原则中可以学到的五条原则。 三、达利欧人生原则第1条: 做一个超级现实的人 达利欧人生原则的第一条是:做一个超级现实的人(Be a hyperrealist)。 你要用自己的眼睛看到真正的现实,不是让自己头脑中想象、理论扭曲现实。根据马浩教授的转述,管理大师彼得·德鲁克曾经赞扬美国前https://www.36kr.com/p/5119172.html