有个读者 diao 要我推荐数据结构和算法方面的书,我觉得很有必要给大家普及一下,因为算法和数据结构实在是太特么重要了——就好像我们人类离不开氧气,绿色植物离不开二氧化碳一样!
请肆无忌惮地点赞吧,微信搜索【沉默王二】关注这个在九朝古都洛阳苟且偷生的程序员。
本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题。
除了 diao,还有个妹子在后台留言给我,也要推荐一波数据结构和算法方面的书籍:
鉴于此,我没吃没喝耗了两天的时间,终于整理好了。除此之外,我还充了百度网盘的会员和 CSDN 的会员(好下载资源),也问了好几个数据结构和算法方面的专家,好验证我的书单是否值得信赖——他们异口同声的肯定了我的付出。
可能有些读者会有这样的疑惑,数据结构有什么用?学习算法有必要吗?那我先来装模作样的回答一下这两个问题。
在计算机领域,通常要处理这样的问题:
1)如果将数据存储到计算机当中。
2)用什么方法来解决这个问题。
数据是一切能输入到计算机中的信息综合,结构是指数据之间的关系,那数据结构就是将数据和它们之间的关系存储到计算机当中。怎么实现存储呢?就需要选择合适的算法,效率才会更高。
Pascal 之父、结构化程序设计的先驱 Niklaus Wirth 有一本非常著名的书,叫作《算法 + 数据结构 = 程序》,可见,数据结构和算法对于程序设计来说,真的非常重要。
数据结构和算法,就像操作系统和计算机网络一样,看似离我们很近,但似乎又很远。
之所以近,是因为如果不懂数据结构和算法,基本上面试就过不了,不管是校招还是社招。之所以远,是因为实际工作中,如果不涉及到操作系统、搜索引擎、网络调度等等方面的底层业务,如果不考虑性能,似乎根本用不到,只要把编程语言封装好的 API 调用得当,只要把框架用的熟练,照样能把代码写得 66 的。
作为一名在编程领域摸爬滚打了十多年的老鸟,我必须郑重其事地提醒一下在座的各位。
如果你是大学生,一定要学习数据结构和算法,否则面试碰壁的时候你会后悔的,除非你打算在小公司混一辈子。
如果考研的话,数据结构也是必考科目。
如果你已经参加工作,想要摆脱 CRUD 的标签,也一定要学习数据结构和算法,否则只能停留在助理工程师和工程师的阶段,无法更进一步。
除此之外,掌握数据结构和算法,还有助于阅读源码和理解其背后的设计思想。
明白了数据结构和算法的重要性之后,我相信读者朋友们已经迫不及待、摩拳擦掌、跃跃欲试了,“请告诉我们该阅读哪些书籍吧!”
第一本,《大话数据结构》
《大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。读技术书最大的烦恼不是这本书经典不经典,而是能不能看的进去,能看的进去,学到了,这本书就是好书。如果看不进去,哪怕是再经典的书,对学习的能都没有一丁点的帮助,对吧?
网络上对这本书的评价褒贬不一,但总体销量还是很不错的,作者也是一名老程序员了。书中的示例用的 C 语言。
第二本,《算法图解》
就像《算法图解》(代码使用 Python 语言实现的)这本书副标题写的那样,“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂,学习起来就轻松多了,对吧?
通过《大话数据结构》和《算法图解》两本书的学习,我相信读者朋友们一定能够入门数据结构和算法了。如果还想更系统、更深入地学习,请继续往下看。
第三本,《数据结构和算法分析》
黑皮书,一眼看上去,就知道是一本经典书,对吧?《数据结构和算法分析》这本书的作者也非常用心,例子不仅有 Java 版的,还有 C 版和 C++ 版的。
这就解决了很多读者朋友们的烦恼,我不擅长 C 啊,我就想看 Java 版的,读者 giao 就要求我给他推荐一些 Java 版的书籍。
第四本,《剑指 offer》
这本书剖析了 80 个典型的编程面试题,如果能搞懂这本书里的内容,应付一般公司的面试应该不成问题。
直白点说,学习算法和数据结构会非常辛苦,那既然付出了这么多心血,我们的目的就很明确,获得一份更好的工作岗位,《剑指 offer》这本书一定能够帮助到我们。
刷题的话,可以选择牛客网或者力扣,如果是 Java 程序员的话,用 Java 刷题就行了。
牛客网:
力扣:
认认真真看完这四本书,如果能够一个一个例子做下来,我相信读者朋友们就可以拍着胸脯自信地说,“数据结构和算法,我算是拿下了!”
“一千个读者,就有一千个哈姆雷特”,不同的读者在读同一本书的时候,感受也是不同的。同理,一个读者在读同一个主题下不同的书时,收获也会大有不同。
那我觉得,很有必要再推荐一些其他方面的书,供不同的读者选择。
第五本,《趣学数据结构》
讲解比较生动,用 C++ 描述的,适合基础一般的初学者。作者陈小玉是我们河南的,还写过另外一本算法方面的书,同样很适合初学者。
第六本,《啊哈算法》
一本有趣的算法入门书,C 语言实现的,没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点。
第七本,《漫画算法:小灰的算法之旅》
用漫画的形式讲述了算法和数据结构的基础知识、复杂多变的算法面试题目及算法的实际应用场景。出了两版,一版 Python,一版 Java。
第八本,《程序员代码面试指南:IT 名企算法与数据结构题目最优解》
这是一本程序员代码面试"神书”!书中对 IT 名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现,选取将近 300 道真实出现过的经典代码面试题,"刷”完这书,就是"题王”!
同样可以上牛客网上刷题:
第九本,《算法》
这是一本非常适合于自学以及作为教材的算法书,特点有:基础非常全面、图示清晰易懂、数学要求低。代码是通过 Java 实现的,虽然是一本大部头书,但难懂的话不过。
第十本,《数据结构与算法之美》
严格意义上说,这不是一本书,它是 XX 时间(虽然很隐晦,但还是打钱吧)平台推出的付费栏目。推荐原因我就不多说了,书籍看累了,是一种选择。
就先推荐这十本吧,够大家学习一段时间了。最后,再来说一说学习数据结构和算法的方法吧,简单来说,就两点:
1)选择一本合适的书
这个问题,我已经帮大家解决了,不论你选择哪一本,最重要的是开始,不要犹豫,早就是优势。
2)编程实现和应用
理解不代表会用,对吧?只有自己亲自动手去实现,去反复的练习,才能真正地掌握。第一次练习可能不记不住,那就第二次、第三次,不要急躁,给自己一点时间和耐心。
如果你手里有点闲钱,建议直接购买纸质书阅读;如果手头确实紧张,钱都给对象买礼物了,那下面这个百度链接也许可以缓解一下你的资金压力:
下载链接:https://pan.baidu.com/s/1rB-CCjjpKPidOio7Ov_0YA 密码:g5pl
如链接失效,请转至备用链接:https://shimo.im/docs/pJQv6qVcHqdYwrxx
最后,希望二哥这些诚恳的建议能够给大家一点点帮助!love peace and sleep!