这部分知识相当于C语言的进阶知识啦,而且这些知识对所有语言是通用的,把它比作编程语言的灵魂毫不为过。
一、入门
- 《大话数据结构》
这本书最大的特点是,它把理论讲得很有趣,不枯燥。而且每个数据结构和算法,作者都结合生活中的例子进行了讲解, 能让你有非常直观的感受。
- 《算法图解》
主打“图解”,通俗易懂。它只有不到 200 页,所以内容比较少。作为入门,看看这本书,能让你对数据结构和算法有个大概的认识。
二、基础
- 《数据结构与算法分析 :C 语言描述》
这本书非常系统、全面、严谨,而且又不是特别难,适合对数据结构和算法有些了解,并且掌握了至少一门编程语言的同学。
- 算法设计与分析基础(豆瓣评分8.7)
本书十分适合用作算法设计和分析的基础教材,也适合任何有兴趣探究算法奥秘的读者使用,只要读者具备数据结构和离散数学的知识即可。
- 算法详解(卷1)——算法基础(豆瓣评分8.8)
本书为对算法感兴趣的广大读者提供了丰富而实用的资料,能够帮助读者提升算法思维能力。本书适合计算机专业的高校教师和学生,想要培养和训练算法思维和计算思维的IT专业人士,以及在准备面试的应聘者和面试官阅读参考。
三、进阶
这三本书非常经典,但都很厚,看起来比较费劲,估计很少有人能全部看完。但如果想更深入地学一遍数据结构和算法,还是建议去看看。
《算法导论》
章节安排不是循序渐进,里面有各种算法正确性、复杂度的证明、推导,对数学功底有一定要求,看起来有些费劲。
《算法》
偏重讲算法。内容不够全面,对数据结构方面的知识讲的不多,动态规划这么重要的知识点却没有讲。
《计算机程序设计艺术》
这本书包括很多卷,相比于其他书籍有更好的深度、广度、系统性和全面性。但如果你对数据结构和算法不是特别感兴趣,没有很好的数学、算法、计算机基础,很难把这本书读完、读懂。
四、实战
动手写代码动手写代码!
- LeetCode:图解算法数据结构力扣
总结的非常全,将数据结构和算法分类,并提供了实战题目和对应的题解。强烈推荐!
- 网友总结的算法思维系列:
fucking-algorithm/算法思维系列 at master · labuladong/fucking-algorithm
五、面试
《剑指 offer》
这本书几乎包含了所有常见的、经典的面试题。如果能搞懂这本书里的内容,应付一般公司的面试应该不成问题。
《编程珠玑》
这本书的豆瓣评分非常高,有 9 分。
这本书最大的特色就是讲了很多针对海量数据的处理技巧。这个可能是其他算法书籍很少涉及的。面试的时候,海量数据处理的问题也是经常会问的,特别是校招面试。不管是开拓眼界,还是应付面试,这本书都很值得一看。《编程之美》
这本书有多位作者,其中绝大部分是微软的工程师,所以书的质量很有保证。不过,这里面的算法题目稍微有点难,也不是很系统,这也是我把它归到面试这一部分的原因。如果你有一定基础,也喜欢钻研些算法问题,或者要面试 Google、Facebook 这样的公司,可以拿这本书里的题,先来自测一下。
六、课外阅读
比较适合在平时悠闲的时候翻翻看看,这些书都列举了大量的列子来解释说明,非常通俗易懂。
《算法帝国》
《数学之美》
《算法之美》
推荐这几本书:
- 彭军和向毅的《数据结构与算法》
跟完教学视频:
- 数据结构:浙江大学的国家精品慕课视频,里面的配套练习非常丰富,对小白也非常友好。
多做OJ题:
有关数据结构和算法的Online Judge都是有一定的难度的,想要搞ACM的话推荐几个Online Judge系统。
经典数据结构和算法题:
- 逆波兰算术表达式 :栈的运用
- 二叉树前序/中序/后序遍历:二叉树的遍历
- 合并果子 :堆(二叉树的一种)的运用
- 贪吃蛇最短路径寻食:广度优先搜索算法(用到队列)
- 贪吃蛇最快路径选择:深度优先搜索算法(用到栈)
- 遗传算法计算函数零点:用到遗传算法的思想
可视化展现
- visualgo
https://visualgo.net/zh
涵盖了主流的数据结构,可视化展示,支持对其进行各种操作,以及提供了很多示例
- Data Structure Visualizations
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
同样是涵盖了主流数据结构和算法,提供动态演示功能。