计算机考研:数据结构常用算法分析(七)?

第七章:

对于无向图,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/