以下文章来源于后端技术小牛说 ,作者后端技术小牛说
简述图
图是由顶点集合和顶点之间的边集合组成的一种数据结构,分为有向图和无向图。
有向图:边具有方向性
无向图:边不具有方向性
简述邻接矩阵
用一个二维数组存放图顶点间关系的数据,这个二维数组称为邻接矩阵。对于无向图,邻接矩阵是对称矩阵
简述邻接表
邻接表是通过链表表示图连接关系的一种方。对于表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。
简述图的深度优先搜索DFS
将图中每个顶点的访问标志设为 FALSE, 之后搜索图中每个顶点,如果未被访问,则以该顶点V0为起始点出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。
简述图的广度优先搜索
从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。
简述最小生成树和其对应的算法
对于有 n 个结点的原图,生成原图的极小连通子图,其包含原图中的所有 n 个结点,并且有保持图连通的最少的边。
普里姆算法:取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有 n-1 个顶点为止。
克鲁斯卡尔算法:先构造一个只含 n 个顶点的子图 SG,然后从权值最小的边开始,若它的添加不使 SG 中产生回路,则在 SG 上加上这条边,如此重复,直至加上 n-1 条边为止。
简述最短路径算法
Dijkstral算法为求解一个点到其余各点最小路径的方法,其算法为:
假设我们求解的是顶点v到其余各个点的最短距离。n次循环至n个顶点全部遍历:
从权值数组中找到权值最小的,标记该边端点k
打印该路径及权值
如果存在经过顶点k到顶点i的边比v->i的权值小
更新权值数组及对应路径
简述堆
堆是一种完全二叉树形式,其可分为最大值堆和最小值堆。
最大值堆:子节点均小于父节点,根节点是树中最大的节点。
最小值堆:子节点均大于父节点,根节点是树中最小的节点。
简述set
Set是一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。
说一下对于树的理解
数据结构树是一种由有限节点组成的层次关系的集合。其特点如下:
- 每个节点有零个或多个子节点;
- 只有一个节点没有父节点,该节点称为根节点;
- 除根节点外,每个节点有且只有一个父节点;
简述二叉查找树
- 二叉查找树的左子树若不为空,则左子树上所有结点的值均小于它的根结点的值;
- 二叉查找树的右子树若不为空,则右子树上所有结点的值均大于它的根结点的值;
- 二叉查找树的左、右子树也分别为二叉查找树;
没有键值相等的结点。




