数据结构面试题(1)

数据结构面试题整理

表达, 是一个需要把发散的观点收回来, 加以润色, 再兜售给别人的艺术.

  1. 时间复杂度
    时间复杂度是执行算法时所需要的计算工作量,因为整个算法在执行时间与基本操作重复执行的次数成正比,所以将算法中基本操作的次数作为算法的时间复杂度的度量,一般情况下,按照基本操作系数最多的输入来计算时间复杂度,并且多数情况下我们去深层循环内语句所描述的操作,作为基本操作。

  2. 循环队列的顺序表中,为什么要空出一个位置?
    这是为了来区分队空和队满的情况。
    如果不空出一个位置,则判断对空和队满的条件是一样的。

  3. 什么是二叉排序树?以及原理,算法。
    二叉排序树,又叫做二叉查找树,它是一棵空树,或者满足以下的情况:
    第一种情况,如果右子树为空树,则左子树上的所有结点的值均小于根节点值。
    第二种情况就是,如果左子树为空,则右子树上所有结点的值均大于根节点值。
    且每个结点的左右子树均为二叉排序树。
    原理:
    二叉排序树的查找过程?
    首先若根结点是查找关键字的话,则查找成功。
    其次,若小于根节点的值,则递归查找左子树,反之,若大于根节点的值,则递归查找右子树,循环往复。
    最后,如果子树为空,则查找不成功。

  4. 哈夫曼树?
    定义:假设给定了n个权值作为n个叶子结点,构造一棵二叉树,并且满足,他的带权路径长度达到最小,我们叫做最优二叉树,并且也叫做哈夫曼树。
    构造方法:假设n个权值作为n个叶子结点,n个权值分别为w1,w2……wn则,构造规则如下:

  • 将w1,w2……wn看成是n棵树的森林,每棵树仅有一个结点。
  • 在从森林中选出两个权值最小的树,进行合并,构成一个新的含有左右子树并且根节点值为左右子树之和的新树。
  • 从森林中删除原来选取的两个较小数的两棵树,并将新树加入。
  • 重复上面👆两步,直至森林中只剩一棵树位置,则该树就为所求得的哈夫曼树。
    特点:
    权值越大则越接近根节点。
    树中没有度为一的结点。
    应用:
    通过哈夫曼编码,可以极大的减少编码的长度,哈弗满编码就是长度最短的前缀编码。
  1. 哈希冲突是什么?如何解决
    哈希表是按照关键码的值来进行访问的数据结构,根据给定的关键字来计算出关键字在表中的地址,来加快查找速度。
    如何构造哈希表:直接定址法,数字分析法,平方取中法,除留余数法。
    所谓的冲突,就是指,不同的关键字映射在了同一个地址上的情况,就比如,管子见6与9 ,我们去哈希函数为 除3的余数。则他们两个的余数均为0,则我们就称这样的现象叫做冲突。
    解决办法有三种:开放定址法(开地址法),链地址法。
    开地址法,又分为线性探查法和平方探查法。
    而链地址法,就是将所有的同义词通过单链表串联在一起。

  2. 深度优先搜索遍历和广度优先搜索遍历的过程?
    深度优先搜索遍历,基本思想就是“不撞南墙不回头”类型,从根节点开始,沿着树的深度,尽可能深层的探索树的分支,当达到了边际,就回溯到上一个,继续向下遍历。
    广度优先搜索遍历:基本思想就是,从上到下,从左至右的遍历所有结点,直至所有顶点被访问。

  3. dijikstra迪杰斯特拉算法过程
    该算法是可以求得某一个顶点到其余顶点的最短路径。
    算法的思想,设有两个顶点集合S和T,s中放的是图中已经找到的最短路径的顶点,t中存放图中剩余结点。
    初始状态S中只包含源点,然后不断的从集合T中选取到达顶点V0,的最短的顶点Vu加入S集合中,没加入一个新的顶点,就需要更新各个顶点的最短路径的长度值,不断的重复这个过程,直至集合T中的顶点全部合并入S集合中为止。

  4. 链表查找某个元素时,平均时间复杂度是多少?
    链表是顺序存储,所以时间复杂度时O(n),平均复杂度时(1+n)/2

  5. 图的存储方式:
    邻接矩阵:是图的顺序存储结构,用两个数组来分别存储数据元素信息和数据元素之间的关系,图的邻接矩阵表示是唯一的,无向图的邻接矩阵是对称的。
    邻接表:是图的链式存储结构,由单链表的表头形成的顶点,和单链表其余结点所形成的边表两部分组成。
    十字链表:有向图的另一种链式存储结构,讲究为止关系,分别由down和right部分
    邻接多重表:无向图的链式存储结构

  6. 图的深度遍历是否唯一
    不一定唯一,我们可以取图中的任一个顶点进行深度遍历

  7. 图的相关概念合集
    图:由结点的有穷集合和边的集合组成。
    类别:有向图和无向图
    顶点的度:出度和入度
    完全图:n个顶点,n(n-1)/2条边
    路径:相邻顶点序偶构成的序列
    简单路径:路径中顶点和路径不重复出现的路径
    回路:路径中第一个顶点和最后一个顶点相同的路径
    连通图:无向图中,任意两个顶点之间都连通则称连通图。
    有向图中,任意两个顶点,从一个顶点到另一个顶点均由来回的路径,则为强连通图。

  8. 最小生成树

  9. 平衡二叉树
    AVL树,是一种特殊的二叉排序树,其左右子树都是平衡二叉树,并且左右子树的高度差绝对值不超过1.
    平衡因子:左右子树高度差
    平衡调整,找到失去平衡的最小子树,即以距离插入结点最近,且平衡因子绝对值大于1的结点为根的子树。分别由四种调节方式LL\LR\RL\RR

  10. 二叉树的存储
    顺序存储结构,用一个数组来存储一棵二叉树,二叉树的结点值按照编号依次存入一个一维数组,适用于完全二叉树,若用一般的二叉树会浪费大量的空间。
    链式存储结构:每个结点用一个链结点来存放。

  11. M 阶 B-树和 M 阶 B+树的主要区别

  12. 折半查找适用于?
    适用范围:顺序结构存储并按照关键字大小有序排列。
    时间复杂度:O(log2N)

  13. 什么是堆?
    堆是一种数据结构,可以把堆看成一个完全二叉树,并且这个完全二叉树满足:
    任何一个非叶节点的值都不大于(或不小于)其左右子树的结点的值。若父亲大孩子小,则为大顶堆,若父亲肖孩子大,则为小顶堆。
    作用:应用于堆排序。

  14. 如何让实现循环队列?
    把数组弄成一个环,让 rear 和 front 指针沿着环走,这样就可以产生循环队列。
    好处:循环队列是顺序队列的改进,在顺序队列中,在元素进队的时候,rear 要向后移动,元素出队的时候,front 也要向后移动,这样经过一系列的出队和入队操作之后,两个指针最后会达到数组的末端,此时虽然队中已经没有元素了,但是还是不能让元素入队,即出现了“假溢出”的现象。循环队列就能避免出现这个现象。

  15. 深度优先搜索形成的是什么?森林唯一吗?
    形成的是森林,不唯一,因为邻接表不唯一

  16. 满二叉树的结点个数(n 层)
    2 的 n 次方减一 (2n-1)

  17. 二叉查找树查找的时间复杂度以及中序遍历后得到什么样的序列
    递增有序序列

  18. 什么图可以进行拓扑排序?
    有向无环图

  19. 顺序队列的特征
    队列是一种操作受限的线性表,只允许队尾入队,在队头进行出队。最大的特点是先进先出。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值