风也温柔

计算机科学知识库

递归算法 适合的数据结构 有堆栈和队列吗 哪本《数据结构与算法》最好?

  大学刷题怪,看不少常见的数据结构书,本科毕业拿到BAT 各大互联网公司 Offer,这题我太有回答权了!!!

  大学的时候没事干就是刷 ,尤其是校招前那段时间,刷遍了 常见的题型,大概刷了近六百来道:

  递归算法 适合的数据结构 有堆栈和队列吗_二叉树递归与非递归遍历算法_堆栈与队列的区别

  先来一张数据结构与算法全景图:

  二叉树递归与非递归遍历算法_递归算法 适合的数据结构 有堆栈和队列吗_堆栈与队列的区别

  可能有同学要问,明明是学数据结构和刷题有什么关系呢?

  这就是一个很多同学的学习误区了,学习数据结构就是记住了各种树、图,但是不会应用!!

  导致很多人,刷 永远停在了 Two Sum,在刷题的时候一定要刷经典题,要举一反三,从一类题抽象出共通的解法,才能以不变应万变,这才是刷题的本质,而不是单单为了刷题而刷题。

  接下来,给大家推荐一些非常不错的《数据结构与算法》书籍,大家记得双击点赞收藏一波哟~

  学习资源推荐

  视频可以看看 :

  由知乎「陈越姥姥」和何钦铭教授联合授课,其大名在计算机领域可谓耳熟能详了。 这门课程对每一种重要的经典数据结构都从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学员增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。手把手教授小白如何将解决问题的抽象算法用具体的代码实现,从而引导初学者更好地入门。 邓俊辉教授讲课,非常的深入浅出,强烈推荐

  这两个是我看过觉得不错的才在这推荐,第一个是初学数据结构时跟着看,第二个是大三复习时刷的。

  入门版书籍可以看看:

  稍微进阶点的:

  这本书强烈推荐,难度适中,但是全面。

  终极版:

  这个量力而行就好了。。。 算法设计

  有了基础的算法思想和数据结构储备,剩下的就是刷题了:

  刷题必备

  刷题网站:

  建议分类刷,先易后难,比如数组、二分、二叉树、动态规划,一个一个系列搞定,总结经验,保证 150 道简单和中等以上吧

  国外算法练习网站

  最重要的是,保持手感,有空就刷一道。

  必备书单

  1、啊哈!算法(豆瓣评分7.7)

  递归算法 适合的数据结构 有堆栈和队列吗_堆栈与队列的区别_二叉树递归与非递归遍历算法

  这是一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松的小故事或是在玩一把趣味解谜游戏,在轻松愉悦中便掌握算法精髓,感受算法之美。

  2. 算法图解

  二叉树递归与非递归遍历算法_堆栈与队列的区别_递归算法 适合的数据结构 有堆栈和队列吗

  图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。

  3.大话数据结构(豆瓣评分7.9)

  递归算法 适合的数据结构 有堆栈和队列吗_堆栈与队列的区别_二叉树递归与非递归遍历算法

  《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比递归算法 适合的数据结构 有堆栈和队列吗,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。

  4. 算法之美(豆瓣8.0分)

  递归算法 适合的数据结构 有堆栈和队列吗_堆栈与队列的区别_二叉树递归与非递归遍历算法

  这本书告诉我们如何更有效地利用直觉、什么时候应该把选择权交给命运、无所适从的时候应该如何做出选择,以及如何有效地与他人保持联系。从找配偶到找停车位,从组织管理个人邮箱的收件箱到理解人类记忆的作用原理,这本书把计算机科学的智慧转化为人类生活的策略,引导我们做出明智的选择。

  5.编程珠玑(豆瓣评分9.1

  二叉树递归与非递归遍历算法_堆栈与队列的区别_递归算法 适合的数据结构 有堆栈和队列吗

  本书是计算机科学方面的经典名著。书的内容围绕程序设计人员面对的一系列实际问题展开。作者Jon 以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的。本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完备的解决思路。本书对各个层次的程序员都具有很高的阅读价值。

  **6.算法导论(原书第3版)(豆瓣评分9.2)

  二叉树递归与非递归遍历算法_堆栈与队列的区别_递归算法 适合的数据结构 有堆栈和队列吗

  本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。

  接下来说说刷题吧,毕竟学算法离不开刷题

  一、刷题前

  首先,大家要明白一个点,那就是我们刷题不是为了去刷题,刷题的目的是为了巩固数据结构与算法,那么也就是说刷题前我们就要学完一遍常见的数据结构与算法,不然你去巩固啥呢?是吧

  在这里我就要强调数据结构如何学习了。

  首先要明白,不管是数组、树、堆还是啥,最终对应在内存中的存储方式只有两种:

  数组由于是紧凑连续存储,可以随机访问,通过索引快速找到对应元素,而且相对节约存储空间。但正因为连续存储,内存空间必须一次性分配够,所 以说数组如果要扩容递归算法 适合的数据结构 有堆栈和队列吗,需要重新分配一块更大的空间,再把数据全部复制过 去,时间复杂度 O(N);而且你如果想在数组中间进行插入和删除,每次必 须搬移后面的所有数据以保持连续,时间复杂度 O(N)。

  链表因为元素不连续,而是靠指针指向下一个元素的位置,所以不存在数组 的扩容问题;如果知道某一元素的前驱和后驱递归算法 适合的数据结构 有堆栈和队列吗 哪本《数据结构与算法》最好?,操作指针即可删除该元素或 者插入新元素,时间复杂度 O(1)。但是正因为存储空间不连续,你无法根 据一个索引算出对应元素的地址,所以不能随机访问;而且由于每个元素必 须存储指向前后元素位置的指针,会消耗相对更多的储存空间。

  那么基于这两种最基本的数据结构我们就可以构建:

  //p/.html

  //p/.html

  //p/.html

  //p/.html

  常见算法:

  //p/.html

  文章来源:https://www.zhihu.com/question/21628833/answer/1906111407