计算机考研:数据结构常用算法分析(七)?
对于无向图,e的范围是:
数据结构中讨论的图都是简单图,任何两个节点之间都不会有双边。
对于有向图,e的范围是:
图的各种存储结构
邻接矩阵方便访问任意两点的边,但不方便计算其邻接点。在深度和广度遍历中,广泛需要要求某一点的相邻点。所以邻接矩阵只在Floyed和Prim和Dijstra中使用。
邻接表可以很容易的找到一个顶点的邻接点,索引对于遍历相关的算法大多使用邻接表。例如深度、宽度、拓扑排序和关键路径。但是他也有一些缺点,就是不方便进去或者那些点可以供他操作。于是有人引入了反向邻接表。最后,人们将这两种表结合在一起,即交叉链表和相邻多表。一种是存储有向图,另一种是存储无向图。
在交叉链表和相邻多表中查找相邻点和对应的逆运算非常方便。所以在实际应用中,凡是邻接表能实现的,一定要用交叉链表和邻接多重表来实现。并且它们的存储效率更高。
1.邻接矩阵(有向图和无向图和网)也称为数组表示。
typedef结构
{ vextype vexs[maxn];∨顶点存储空间∨
adj type A[maxn][maxn];∑邻接矩阵∧
int vexnum,arcnum//图形的顶点数和边数
GraphKind类;//图形的类型
} mgraph
2.邻接表(有向图和无向图和网络)
Typedef结构节点edge
{ int adjint w;∑邻接点和权值
结构节点* next指向下一个弧或边
} linknode
Typedef结构∨顶点类型∨
{ vtype数据;∑顶点范围
linknode * farc∑指向与该顶点相关联的第一条弧或边
} Vnode
typedef结构
{
vnode G[maxn];∨顶点表∨
int vexnum,arcnum
GraphKind类;
} ALGraph
adjvexnextarcinfo
边缘节点
数据firstarc
顶点节点
3.交叉链表(有向图和有向网络)
headvextaivexhlinktlinkinfo
边缘节点
datafirstinfirstout
顶点节点
4.邻接多表(无向图)
markivexjvexilinkjlinkinfo
边缘节点
数据边缘
顶点节点
有向无环图(DAG):是用公共子表达式描述表达式的有效工具。二叉树也可以表示表达式,但是使用有向无环图可以实现同一个子公式的共享,从而节省存储空间。
顶点度数:
无向图:一个顶点V的度数为D(V),表示与V关联的边数。
有向图:顶点V的度d(V)= ID(V)+OD(V)
强连通分支:在有向图中,如果图中任意两个顶点之间有一条路,则称为强连通图。图中的最大强连通子图称为强连通分量。
这里的“Maxim”是指如果在一个连通分支上加上顶点和边,就不能形成原图中的一个连通子图,即该连通分支是一个集合最大的连通子图。有向图的连通性意味着它是强连通的。
如果你对考研有疑问,不知道考研中心的内容怎么总结,不了解考研报名的地方政策,点击最下方咨询官网,免费获取复习资料:/xl/