03 增删查:掌握数据处理的基本操作,以不变应万变 03 增删查:掌握数据处理的基本操作,以不变应万变通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想。接下来,你需要在理论思想的指导下灵活使用。其实,要想灵活使用数据结构,你需要先弄清楚数据在代码中被处理、加工的最小单位动作,也就是数据结构的基本操作,有了这些动作之后,你就可以基于此去选择更合适的数据结构了。本课时我们就先来学习数据处理的基本操作。 代码对数 2022-08-23 专栏 > 重学数据结构与算法-完
06 队列:先进先出的线性表,如何实现增删查? 06 队列:先进先出的线性表,如何实现增删查?通过前面课时的学习,你学会了数据结构中可以灵活增删数据的线性表。在需要严格遵守数据处理顺序的场景下,我们对线性表予以限制,那么就得到了后进先出的数据结构,栈。与之对应的还有一种限制的线性表,它遵循先进先出的性质,这就是队列。这一课时我们就来学习队列的增删查。 队列是什么与栈相似,队列也是一种特殊的线性表,与线性表的不同之处也是体现 2022-08-23 专栏 > 重学数据结构与算法-完
08 字符串:如何正确回答面试中高频考察的字符串匹配算法? 08 字符串:如何正确回答面试中高频考察的字符串匹配算法?这一节我们来讲字符串和它的相关操作。 字符串是什么字符串(string) 是由 n 个字符组成的一个有序整体( n >= 0 )。例如,s = “BEIJING” ,s 代表这个串的串名,BEIJING是串的值。这里的双引号不是串的值,作用只是为了将串和其他结构区分开。字符串的逻辑结构和线性表 2022-08-23 专栏 > 重学数据结构与算法-完
07 数组:如何实现基于索引的查找? 07 数组:如何实现基于索引的查找?通过前面几个课时的学习,我们了解了线性表、栈、队列的基本概念,至此,相信你已经掌握了这些数据处理的基本操作,能够熟练地完成线性表、栈、队列结构下的增删查操作。 由于栈和队列是特殊的线性表,本质上它们都可以被看作是一类基本结构。而数组则可以看成是线性表的一种推广,它属于另外一种基本的数据结构。这一课时,我们就来学习数组的概念以及如何用数组实现 2022-08-23 专栏 > 重学数据结构与算法-完
09 树和二叉树:分支关系与层次结构下,如何有效实现增删查? 09 树和二叉树:分支关系与层次结构下,如何有效实现增删查?前面课时我们学习了线性表、栈、队列和数组。栈、队列都是特殊的线性表,数组可以看成是线性表的一种推广。根据学习,我们知道了这几种数据结构,在对数据的增删查操作上各有千秋。这一课时再来学习另一种从形式上看上去差异比较大的数据结构,树,以及如何用树和二叉树实现对数据的增删查的操作。 树是什么树是由结点和边组成的,不存在环的 2022-08-23 专栏 > 重学数据结构与算法-完
10 哈希表:如何利用好高效率查找的“利器”? 10 哈希表:如何利用好高效率查找的“利器”?在前面课时中,我们先后学习了线性表、数组、字符串和树,并着重分析了它们对于数据的增删查操作。 对于数据处理它们彼此之间各有千秋,例如: 线性表中的栈和队列对增删有严格要求,它们会更关注数据的顺序。 数组和字符串需要保持数据类型的统一,并且在基于索引的查找上会更有优势。 树的优势则体现在数据的层次结构上。 但它们普遍都存在这样的 2022-08-23 专栏 > 重学数据结构与算法-完
11 递归:如何利用递归求解汉诺塔问题? 11 递归:如何利用递归求解汉诺塔问题?前面课时中,我们完成了数据结构基础知识的学习,从这一课时开始,我们将正式进入算法思维的学习。 不管是数据结构还是算法思维,它们的目标都是降低时间复杂度。数据结构是从数据组织形式的角度达成这个目标,而算法思维则是从数据处理的思路上去达成这个目标。 举个例子,虽然你选择了一个高效率的数据结构去处理问题,但如果数据处理的逻辑上出现缺陷,仍然会 2022-08-23 专栏 > 重学数据结构与算法-完
13 排序:经典排序算法原理解析与优劣对比 13 排序:经典排序算法原理解析与优劣对比前面课时中,我们学习了分治法的思想,以及二分查找的实现方法。我们讲到,二分查找要求原数组必须有序。其实,由无序到有序,这是算法领域最常见的一类问题,即排序问题。本课时,我们就来学习4 种常见的排序算法,包括冒泡排序、插入排序、归并排序以及快速排序。此外,我们还会对这 4 种排序算法的优劣势进行详细地对比分析。 什么是排序问题排序,就是 2022-08-23 专栏 > 重学数据结构与算法-完
12 分治:如何利用分治法完成数据查找? 12 分治:如何利用分治法完成数据查找?前面课时中,我们学习了递归的思想,它是一种函数自我调用缩小问题规模的方法。这一课时我们继续学习另一种算法思维,分治法。 从定性的角度来看,分治法的核心思想就是“分而治之”。利用分而治之的思想,就可以把一个大规模、高难度的问题,分解为若干个小规模、低难度的小问题。随后,开发者将面对多个简单的问题,并很快地找到答案各个击破。在把这些简单问题 2022-08-23 专栏 > 重学数据结构与算法-完
14 动态规划:如何通过最优子结构,完成复杂问题求解? 14 动态规划:如何通过最优子结构,完成复杂问题求解?在前面课时中,我们学习了分治法的思想,并以二分查找为例介绍了分治的实现逻辑。 我们提到过, 分治法的使用必须满足 4 个条件: 问题的解决难度与数据规模有关; 原问题可被分解; 子问题的解可以合并为原问题的解; 所有的子问题相互独立。 然而在实际工作中还存在这样一类问题,它们满足前 3 个条件,唯独不满足第 4个条件。 2022-08-23 专栏 > 重学数据结构与算法-完