保研面试复习之数据结构篇

  1. 数据项、数据元素和数据结构的概念。

数据项是组成数据元素的,有独立含义的,不可分割的最小单位。数据元素是数据的基本单位。数据结构是带结构的数据元素的集合。数据结构包括逻辑结构和存储结构两个层次。
数据结构的三要素是逻辑结构,存储结构和数据的运算。

  1. 逻辑结构和存储结构区别。

逻辑结构包括集合结构、线性结构、树结构和图结构。
存储结构包括顺序存储结构、链式存储结构、索引存储结构、散列存储结构。
顺序存储结构是逻辑上相邻的元素在物理位置上也是相邻的。链式存储结构是在逻辑上相邻的元素物理位置不一定相邻。索引存储结构是在存储元素信息的同时建立附加的索引表,索引表包括关键字和地址。散列存结构是根据元素的关键字,可以直接计算出元素的存储地址。
在这里插入图片描述

  1. 算法的5个重要特性:有穷性,确定性,可行性,输入0个或多个,输出一个或多个。大O是所有语句频度之和的数量级。算法时间复杂度不仅依赖于问题的规模,也取决于待输入数据的性质。

  2. 算法的时间复杂度取决于问题的规模和待处理数据的初始状态。

  3. 单链表的结点包括两个域:一个是数据域,一个是指针域。

  4. 链表增加头结点的作用:便于首元结点的处理;便于空表和非空表的统一处理。

  5. 顺序表和链表的比较:
    在这里插入图片描述

  6. 一个递归算法必须包括终止条件和递归部分。

  7. 字符串是由0个或多个字符组成的有限序列。字符串的数据元素是单个字符。

  8. 二叉树的性质:

  • 在二叉树的第i层上至多有 2 i − 1 2^{i-1} 2i1个结点,i≥1。
  • 深度为k的二叉树,至多有 2 k − 1 2^k-1 2k1个结点 k≥1。
  • 对任何一颗二叉树T,如果其终端结点数为 n 0 n_0 n0,度为2的结点数为 n 2 n_2 n2,则 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
  • 具有n个结点的完全二叉树的深度为 ┗ l o g 2 n + 1 ┚ ┗log_2n+1┚ log2n+1
  • 如果将一棵有n个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号1,2,3,......,n,然后按此结点编号将树中各结点顺序的存放于一个一维数组,并简称编号为i的结点为结点i( i>=1 && i<=n),则有以下关系:
    (1)若 i= 1,则结点i为根,无父结点;若 i> 1,则结点 i 的父结点为结点int_DOWN(i / 2);
    (2)若 2*i <= n,则结点 i 的左子女为结点 2*i;
    (3)若2*i<=n,则结点i的右子女为结点2*i+1;
    (4)若结点编号i为奇数,且i!=1,它处于右兄弟位置,则它的左兄弟为结点i-1;
    (5)若结点编号i为偶数,且i!=n,它处于左兄弟位置,则它的右兄弟为结点i+1;
    (6)结点i所在的层次为 int_DOWN(log(2,i))+1。
  1. 哈弗曼树又称最优树,是一类带权路径长度最短的树。一颗有n个叶子结点的哈弗曼大树,共有2n-1个结点。
  2. 树的存储结构:双亲表示法、孩子表示法、孩子兄弟表示法。
  3. 对于无向图,若有n(n-1)/2条边,则称为无向完全图;对于有向图,若具有n(n-1)条边,则称为有向完全图。
  4. 强连通图和强连通分量是针对有向图。一个极小连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边,这样的连通子图称为连通图的生成树。
  5. 二叉树的遍历算法分为先序遍历、中序遍历,后序遍历;图遍历算法分为深度优先搜索遍历和广度优先搜索遍历。
  6. 图的深度优先遍历,类似于二叉树的先序遍历;图的广度优先遍历,类似于二叉树的层次遍历。
  7. 构造最小生成树是需要选择n个结点和n-1条最小的边。
  8. 普里姆算法,加点法:选择与点相关的最短路径。归并点,时间复杂度为 O ( n 2 ) O(n^2) O(n2)适用于稠密网。
    克鲁斯卡尔算法是选择集合中权值较小的点。归并边,时间复杂度为 O ( e l o g 2 e ) O(elog_2e) O(elog2e)适用于稀疏网。
  9. 迪杰斯特拉算法是求解从某个源点到其余各顶点的最短路径。此过程中不需遍历图中所有的点。弗洛伊德算法是求解每一对顶点之间的最短路径算法。
  10. 拓扑排序利用的是AOV网是无权有向无环图,实现过程中利用了栈,可以用来判断一个有向图是否有环。 AOE网解决关键路径问题是带权有向无环图。
  11. 平衡二叉树是一种特殊的2叉排序树,又称avl树。
  12. 构造散列函数的方法有数字分析法、平方取中法、折叠法、除留余数法。处理冲突的方法有开放地址法和链地址法。开放地址法又分为线性探测法、二次探测法和伪随机探测法。比较次数取决于散列函数、处理冲突的方法和散列表的装填因子。

在这里插入图片描述
23. 使用循环比递归的效率高吗?

不一定,因为递归的优点是代码简洁清晰,容易检查正确性;缺点是当递归调用的次数较多时,要增加额外的堆栈处理,有可能产生堆栈溢出的情况,对执行效率有一定的影响。循环的优点是结构简单速度快,缺点是它不能解决全部的问题,有些问题适合用递归来处理,而不适合用循环。
递归可以理解为递推和回归,相当于一个树结构,其过程相当于是树的深度优先遍历。迭代是一个环结构。

  1. 贪心算法、动态规划、分治法的区别。

贪心算法是求解局部最优解,自顶向下,得到的最后结果不能保证是全局最优解;
动态规划是分解将原问题分解为若干个项重叠的子问题,然后通过解决子问题来得到原问题的解;
分治法分为分解、解决、合并,就是将原问题分解为若干个规模较小的与原问题结构相似的,互不相关的子问题。然后递归地求解子问题,合并这些子问题的解得到原问题的解。

  1. 栈在括号匹配中匹配中的算法思想。

如果出现的是左括号,则进栈。如果出现的是右括号,则检查栈是否为空,若为空则表示右括号多余,或不为空,则检查栈顶元素是否为左括号,如果是则表明匹配,如果不是,则表明不匹配。表达式检验结束时,若栈为空,匹配正确,否则表明左括号有余。

  1. 栈在后缀表达式求值中的应用。

顺序扫描表达式的每一项,如果是操作数则入栈,如果是操作符则出连续出栈顶两个操作数,并进行运算,将结果重新加入栈中。当表达式的所有操作数都处理完成后,则栈顶存放的是表达式的计算结果。

Guess you like

Origin blog.csdn.net/weixin_43790779/article/details/120934734