有个读者diao要我推荐数据结构和算法方面的书,我觉得很有必要给大家普及一下,因为算法和数据结构实在是太特么重要了——就好像我们人类离不开氧气,绿色植物离不开二氧化碳一样!
除了diao,还有个妹子在后台留言给我,也要推荐一波数据结构和算法方面的书籍:
可能有些读者会有这样的疑惑,数据结构有什么用?学习算法有必要吗?那我先来装模作样的回答一下这两个问题。
在计算机领域,通常要处理这样的问题:
1)如果将数据存储到计算机当中。
2)用什么方法来解决这个问题。
数据是一切能输入到计算机中的信息综合,结构是指数据之间的关系,那数据结构就是将数据和它们之间的关系存储到计算机当中。怎么实现存储呢?就需要选择合适的算法,效率才会更高。
Pascal之父、结构化程序设计的先驱NiklausWirth有一本非常著名的书,叫作《算法+数据结构=程序》,可见,数据结构和算法对于程序设计来说,真的非常重要。
数据结构和算法,就像操作系统和计算机网络一样,看似离我们很近,但似乎又很远。
之所以近,是因为如果不懂数据结构和算法,基本上面试就过不了,不管是校招还是社招。之所以远,是因为实际工作中,如果不涉及到操作系统、搜索引擎、网络调度等等方面的底层业务,如果不考虑性能,似乎根本用不到,只要把编程语言封装好的API调用得当,只要把框架用的熟练,照样能把代码写得66的。
作为一名在编程领域摸爬滚打了十多年的老鸟,我必须郑重其事地提醒一下在座的各位。
如果你是大学生,一定要学习数据结构和算法,否则面试碰壁的时候你会后悔的,除非你打算在小公司混一辈子。
如果考研的话,数据结构也是必考科目。
除此之外,掌握数据结构和算法,还有助于阅读源码和理解其背后的设计思想。
明白了数据结构和算法的重要性之后,我相信读者朋友们已经迫不及待、摩拳擦掌、跃跃欲试了,“请告诉我们该阅读哪些书籍吧!”
第一本,《大话数据结构》
《大话数据结构》这本书最大的特点是,它把理论讲得很有趣,不枯燥。读技术书最大的烦恼不是这本书经典不经典,而是能不能看的进去,能看的进去,学到了,这本书就是好书。如果看不进去,哪怕是再经典的书,对学习的能都没有一丁点的帮助,对吧?
网络上对这本书的评价褒贬不一,但总体销量还是很不错的,作者也是一名老程序员了。书中的示例用的C语言。
第二本,《算法图解》
就像《算法图解》(代码使用Python语言实现的)这本书副标题写的那样,“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂,学习起来就轻松多了,对吧?
通过《大话数据结构》和《算法图解》两本书的学习,我相信读者朋友们一定能够入门数据结构和算法了。如果还想更系统、更深入地学习,请继续往下看。
第三本,《数据结构和算法分析》
黑皮书,一眼看上去,就知道是一本经典书,对吧?《数据结构和算法分析》这本书的作者也非常用心,例子不仅有Java版的,还有C版和C++版的。
这就解决了很多读者朋友们的烦恼,我不擅长C啊,我就想看Java版的,读者giao就要求我给他推荐一些Java版的书籍。
第四本,《剑指offer》
这本书剖析了80个典型的编程面试题,如果能搞懂这本书里的内容,应付一般公司的面试应该不成问题。
直白点说,学习算法和数据结构会非常辛苦,那既然付出了这么多心血,我们的目的就很明确,获得一份更好的工作岗位,《剑指offer》这本书一定能够帮助到我们。
刷题的话,可以选择牛客网或者力扣,如果是Java程序员的话,用Java刷题就行了。
牛客网:
力扣:
认认真真看完这四本书,如果能够一个一个例子做下来,我相信读者朋友们就可以拍着胸脯自信地说,“数据结构和算法,我算是拿下了!”
“一千个读者,就有一千个哈姆雷特”,不同的读者在读同一本书的时候,感受也是不同的。同理,一个读者在读同一个主题下不同的书时,收获也会大有不同。
那我觉得,很有必要再推荐一些其他方面的书,供不同的读者选择。
第五本,《趣学数据结构》
讲解比较生动,用C++描述的,适合基础一般的初学者。作者陈小玉是我们河南的,还写过另外一本算法方面的书,同样很适合初学者。
第六本,《啊哈算法》
一本有趣的算法入门书,C语言实现的,没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点。
第七本,《漫画算法:小灰的算法之旅》
用漫画的形式讲述了算法和数据结构的基础知识、复杂多变的算法面试题目及算法的实际应用场景。出了两版,一版Python,一版Java。
第八本,《程序员代码面试指南:IT名企算法与数据结构题目最优解》
同样可以上牛客网上刷题:
第九本,《算法》
这是一本非常适合于自学以及作为教材的算法书,特点有:基础非常全面、图示清晰易懂、数学要求低。代码是通过Java实现的,虽然是一本大部头书,但难懂的话不过。
第十本,《数据结构与算法之美》
1)选择一本合适的书
这个问题,我已经帮大家解决了,不论你选择哪一本,最重要的是开始,不要犹豫,早就是优势。
2)编程实现和应用
最后,希望二哥这些诚恳的建议能够给大家一点点帮助!lovepeaceandsleep!