计算机保研/考研数据结构面试指南:核心知识点

绪论

  • 数据结构的三要素是什么?【答:逻辑结构、存储结构和数据的运算】
  • 什么是算法?【答:算法是一种对特定问题求解步骤的描述 一组指令/操作】
  • 算法有哪些特点?【答:确定性、可用性、有穷性、输入、输出】
  • 从哪些角度评价算法?【答:正确性、鲁棒性、可读性、算法的效率(时间复杂度/空间复杂度等)】
  • 数据结构的四种存储方式是什么?【答:顺序存储、链式存储、散列存储和索引存储】
  • 顺序存储和链式存储有什么区别?【答:顺序存储的存储空间是连续的;链式存储的存储空间是不连续的】
  • 线性表包括哪些?【答:顺序表和链表;两种存储:基于数组(顺序存储);基于链表(链式存储)】

栈、队列

栈/队列:一种操作受限的线性表

栈:先进先出;顺序存储/链式存储;括号匹配、三种表达式的转换

队列:先进后出;杨辉三角

  • 如何区分循环队列是队空还是队满?
    • 法一:牺牲一个单元格,即 rear % max = front 队空,(rear + 1) % max = front 队满
    • 法二:增加一个额外变量,记录元素个数
  • 栈有有哪些应用?【答:函数调用、括号匹配和表达式求值】
  • 队列有哪些应用?【答:任务调度、缓冲区管理和消息传递】
  • 请简要介绍以下 KMP 算法【答:字符串模板匹配,在匹配过程中避免不必要的回溯(每次匹配过程中推断出后续完全不可能匹配成功的匹配过程),从而提高匹配效率】

树与二叉树

名词概念:树( n n n 个节点的有限集合;递归定义)、二叉树、满二叉树、完全二叉树、二叉排序树、平衡二叉树

术语:节点、节点的度、树的度、叶子节点、路径、节点的层次/深度、节点的高度

前序、中序、后序遍历、层序遍历

二叉树的重要性质: n 0 = n 2 + 1 n_0 = n_2 + 1 n0=n2+1 【树的性质:节点树 = 边数 + 1】

哈夫曼树和哈夫曼编码、并查集

  • 根节点没有直接前驱,其余均有;叶子节点没有直接后继,其余均有
  • 什么是有序树?【答:有序树指的是节点的各子树是有次序的,不能更换位置;换位置就是一个新的树】
  • 二叉树和度为 2 的有序树的区别?【答:二叉树可以只有 1 个节点,但度为 2 的有序树至少有 3 个节点】
  • 什么是满二叉树?完全二叉树?【答:满二叉树指的是二叉树的每一层都是满的;完全二叉树balabala】
  • 什么是二叉搜索树?平衡二叉树?【答:二叉搜索树又称二叉排序树,左子树均小于根节点,右子树均大于根节点,递归定义;平衡二叉树指的是对于任意一个节点,它的左子树的高度和右子树的高度差小于等于 1】
  • 二叉树有哪些存储结构?【答:顺序存储,即用数组来存,适用于满二叉树和完全二叉树;链式存储,即用链表来存,又称二叉链表】考点:对于 n n n 个节点的二叉树,只需要使用 n − 1 n-1 n1 的位置,剩余 n + 1 n+1 n+1 个空指针域

除此之外,还有静态结构,本质上也是数组【如何画出这棵树?利用根节点无双亲节点的性质】

  • 二叉树有哪些遍历顺序?【答:前中后序遍历、层序遍历;前中后序遍历的区分是根据根节点的遍历顺序】

  • 什么是哈夫曼树?【答:在 n n n 个带权叶子节点的情况下,带权路径最小的树被称为哈夫曼树】

  • 什么是二叉搜索树?【答:二叉搜索树又称二叉排序树、二叉查找树;对于一个二叉树来说,如果左子树的值都小于根节点的值,右子树的值都大于根节点的值,那么就称这个树为二叉搜索树;对二叉搜索树做中序遍历,可得到从小到大的序列】

    • 利用二分思想,查找效率: O ( l o g ( n ) ) O(log(n)) O(log(n))
    • 缺点:当左右子树高度差太大时,查找效率低(例如当从小到大构建二叉排序树时,查找效率退化至 O ( n ) O(n) O(n)
    • 改进:平衡左右子树 -> 平衡二叉树
  • 请简要介绍一下平衡二叉树【答:平衡二叉树是一种特殊的二叉排序树,要求对于任意一个根节点,左子树和右子树的高度差要小于等于 1;在插入/删除节点时,通过左旋/右旋来保证树的平衡性】

    • 缺点:如果插入操作比较多,则需要进行大量旋转以保证平衡
    • 改进:为了降低旋转开销,引入红黑树
  • 什么是红黑树?【答:红黑树与平衡二叉树类似,相比之下,红黑树降低了对平衡性的要求】

  • 相对于平衡二叉树,使用红黑树有什么优点?更适合什么场景?【答:在需要频繁进行插入/删除节点时,平衡二叉树需要进行大量的旋转以保证严格平衡,这部分开销很大,红黑树因为降低了对平衡的要求,更适合】

  • 请简要介绍一下 B 树、B+ 树【答:B 树一种多路平衡搜索树,能够保证数据的有序性】

    若普通二叉树作为文件系统的索引,随着数据的插入,发现树的深度会变深。而文件系统的索引在磁盘上,磁盘的数据要加载到内存中才能处理,需要反复 IO 影响查询的效率,于是引入了 B 树可以作为文件系统的索引。

    由于 B 树每个节点存放数据,而数据相比关键字占用的空间较大,会导致每个磁盘块存放的索引项的记录会变少。B+ 树的非叶子节点不存放数据,只存放指针和关键字,这样每个磁盘块就可以存放更多的记录。这样深度会减小很多,加快了 IO 速度。

  • B 树和 B+ 树有什么区别?

    • m 阶 B 树和 B+ 树:B 树的根节点关键字个数取值 1 到 m-1,B+ 树的根节点关键字取值 1 到m;B 树非根节点关键字取值 ceil(m/2)-1到m-1,B+树非根节点关键字取值 ceil(m/2) 到 m
    • B 树分叉个数等于关键字个数 +1,B+ 树分叉个数等于关键字个数
    • B 树的每个节点既有关键字,又有数据;B+ 树的数据只在叶子上,非叶子节点只有关键字
    • B+ 树的叶子节点相互之间有一个链路,B 树没有
    • 当查找数据时,从根出发,B 树可能不需要查找到叶子节点就可以找到数据,而 B+ 树要找到叶子节点才找到数据
  • 如何由遍历序列构造一棵二叉树?【答:必须要知道中序遍历】

  • 请简要介绍一下线索二叉树【答:对于有 n n n 个节点的树,它包含有 2 n 2n 2n 个指针域,但这只使用了 n − 1 n-1 n1 个指针域,因此空出来 n + 1 n+1 n+1 个指针域,线索二叉树指的是利用这些空白的指针域,这些空白的指针域也被称作线索,存放的是某种遍历顺序下的该节点的前驱结点和后继结点】

  • 请简要说一下树的存储结构【答:双亲表示法、孩子表示法、孩子兄弟表示法】

  • 请简要介绍一下并查集【答:并查集是一种用来解决集合合并和查找的数据结构,能够高效进行集合的合并和判断两个元素是否属于同一集合;并查集主要有两种基本操作,find 和 union】

    • 如何改进并查集?【答:有两种方法,一种是路径压缩,另一种是按高度合并;前者是将所有节点都连接到根节点,后者是将高度较低的树合并到高度较高的树上】
  • 请介绍一下哈希表,如何构造哈希函数?如何解决哈希冲突?【答:哈希表又称散列表,哈希表是一种通过关键字的值进行查找的数据结构;构造方法:直接定址法 H ( k e y ) = a ∗ k e y + b H(key)=a*key+b H(key)=akey+b 和除留取余法 H ( k e y ) = k e y % p H(key)=key\%p H(key)=key%p;解决哈希冲突的方法:开放地址法和链地址法】

  • 什么是图?【答:图是一种由顶点集 V V V 和边集 E E E 组成的数据结构,没有“空图”这一说】

  • 什么是有向图?什么是无向图?【答:区别在于边是否有方向】

  • 什么是有权图?什么是无权图?【答:区别在于边是否有权重】

  • 什么是路径?简单路径?最短路径?回路/环?

  • 图的存储结构有哪些?【答:邻接矩阵和邻接链表】

  • 什么是节点的度?【答:度指的是连接某个顶点的边的条数;对于有向图,度等于入度+出度】

  • 什么是连通图?【答:连通图一般是对无向图来说的,对有向图一般叫强连通图;连通图指的是在无向图中,任意两个顶点都是连通的】

    • 对于 n n n 个顶点的无向图 G G G,若 G G G 是连通图,则最少有 n − 1 n-1 n1 条边;若 G G G 是非连通图,则最多有 ( n − 1 ) ( n − 2 ) 2 \frac{(n-1)(n-2)}{2} 2(n1)(n2) 条边【 n − 1 n-1 n1 个顶点组成完全图】
  • 什么是强连通图?【答:对于有向图来说,任意两个顶点都是连通的,即从 u u u v v v 有路径,从 v v v u u u 也有路径,则称为强连通图】

    • 对于 n n n 个顶点的有向图 G G G,若 G G G 是强连通图,则最少有 n − 1 n-1 n1 条边【组成一个环】
  • 什么是子图?什么是生成(支撑)子图?【答:子图是图的子集,即顶点集 V ′ V' V 是原图顶点集 V V V 的子集、边集 E ′ E' E 是原图边集 E E E 的子集;对于生成子图,要求 V ′ = V V'=V V=V,即仅边集是子集关系】

  • 什么是生成树?【答:包含图中全部顶点的一个极小连通图,即尽可能包含少的边】

    • 结论:若连通图有 n n n 个顶点,则它的生成树有 n − 1 n-1 n1 条边
    • 对于生成树而言,若砍去它的一条边,则它会变成一个非连通图;若加上一条边,则会有一个回路
  • 什么是完全图?【答:每两个顶点之间均有边相连,对于无向图,一条边即可;对于有向图,需要两条边】

  • 什么是稠密图?什么稀疏图?【答:稀疏图:有很少条边或弧(边的条数 ∣ E ∣ |E| E 远小于 ∣ V ∣ 2 |V|^2 V2),反之边的条数 ∣ E ∣ |E| E 接近 ∣ V ∣ 2 |V|^2 V2,称为稠密图。】

  • 树和图的关系【答:树是不存在回路且连通的无向图】

  • 【步骤】广度优先遍历 -> 广度优先生成树:若图有 n n n 个顶点,则其广度优先生成树有 n − 1 n-1 n1 个顶点

    • 空间复杂度: O ( ∣ V ∣ ) O(|V|) O(V)
    • 时间复杂度:
      • O ( ∣ V ∣ 2 ) O(|V|^2) O(V2)(邻接矩阵)
      • O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(V+E)(邻接链表) 【访问 ∣ V ∣ |V| V 个顶点,查找每个顶点的邻接点】
    • 用邻接表存储,遍历结果不唯一;用邻接矩阵存储,遍历结果唯一
  • 深度优先遍历结论同上!

  • 什么是最小生成树?【答:边 权值和最小的生成树】

  • 求最小生成树有哪些方法?【答:Prim 算法和 Kruskal 算法】

    • Kruskal 算法每次会选择权值最小的边,可以使用最小堆
  • 什么是最短路径?求最短路径的常用方法?【答:从一个顶点出发,求出到其余各顶点的最短路径;Dijkstra、Floyd、BFS】

  • TODO:手动模拟 Prim、Kruskal 和 Dijkstra 算法【时间/空间复杂度分析】

  • 如何判断图是否包含环?【答:拓扑排序、DFS 或者并查集】

    • 构造拓扑序列步骤
    • 从图中选择一个入度为零的点。
    • 输出该顶点,从图中删除此顶点及其所有的出边。

    重复上面两步,直到所有顶点都输出,拓扑排序完成,或者图中不存在入度为零的点,此时说明图是有环图,拓扑排序无法完成,陷入死锁。

  • 什么是 AOE 网?如何是关键路径/活动?【答:AOE 网是一种有向带权图,通常有一个起点和终点;在由起点到终点的所有路径中,具有最大路径长度的路径被称为关键路径,关键路径上的活动被称为关键活动】

  • 什么是拓扑排序?【答:拓扑排序主要是解决对一个有向无环图的所有节点进行排序】

  • 请简要介绍一下 DFS 和 BFS,它们有什么区别?

    • DFS 适用于找到一个可行解,不需要找最短路径的情况。它的空间复杂度较低,适合在深度方向上搜索,例如拓扑排序、连通性判断、回溯等问题。
    • BFS 适用于找到最短路径。它的时间复杂度较低,适合在广度方向上搜索,例如寻找最短路径、连通性判断、社交网络中查找关系等问题。

排序

  • 各种排序算法的比较
  • 如何解决找 Top K 问题?【答:排序;堆;快速排序】
  • 为什么快速排序的最坏情况会退化成 O ( n 2 ) O(n^2) O(n2)?【答:每次选择的基准元素恰好是最大值或者最小值】
  • 为什么排序算法需要稳定?【答:排序算法的稳定性意味着对于具有相同关键字的元素,排序后它们的相对顺序保持不变;一种指标相同,接着按照另一种指标排序,比如说大家工资都一样,我想让工号小的排在前面】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值