邻接表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(b) 若图为非权图,则 (1) aij =0; (2) aij =1, 当 i≠j, 且<Vi,Vj>存在时; (3) aij=∝,当且 i≠j, 且<Vi,Vj< /SUB> >不存在时。
称矩阵 A 为图的邻接矩阵。
显然,无向图的邻接矩阵是对称矩阵 .
上图所对应的邻接矩阵如下:
7.2.1.2 邻接表 我们首先给出边链表的概念:与顶点 V 邻接的所有顶点以某种次序组成的一个链表,被称为顶 所示:
7.2.3 邻 接 表
一、邻接表 邻接表是图的一种链式存储结构。 邻接表中,对图中每个顶点建立一个单链表,第 i 个单链表中的
结 点 表 示 依 附 于 顶 点 Vi 的 边 ( 对 有 向 图 是 以 顶 点 Vi 为 尾 的 弧 ) 。
邻接表中的表结点和头结点结构: 表结点
adjvex
nextarc
由顺序存储的顶点表和链接存储的边链表构成的图的存储结构被称为邻接表。
图 7.6(a)是与图 7.2 中权图(a) 相对应的邻接表存储,图 7.6 (b) 是与图 7.3 中非权图(a)
显然,对于用邻接表存储的有向图,每条边只对应一个边结点;而对于用邻接表存储的无向 根据邻接表,我们可以很容易地统计出有向图中每个结点的出度,但是,如果要统计结点的入 点,其时间复杂度为 O(e)(e 为图中边的个数),从而统计所有结点的入度的时间复杂度为 O(n*e 因此,考虑建立逆邻接表,图 7.6(c)是与图 7.2(a)相对应的逆邻接表,根据逆邻接表,易统 本节开始时我们曾提到,用邻接矩阵还是用邻接表来存储图,要视对具体的图实施的具体操作 对于边很多的图,适于用邻接矩阵存储,因为占用的空间少;而对于顶点多而边少的图,若用 个稀疏矩阵,存储利用率很低。因此,顶点多而边少的图适于用邻接表存储。
由顺序存储的顶点表和链接存储的边链表构成的图的存储结构被称为邻接表。
图 7.6(a)是与图 7.2 中权图(a) 相对应的邻接表存储,图 7.6 (b) 是与图 7.3 中非权图(a)
显然,对于用邻接表存储的有向图,每条边只对应一个边结点;而对于用邻接表存储的无向图,每条边则对应
根据邻接表,我们可以很容易地统计出有向图中每个结点的出度,但是,如果要统计结点的入度,每统计 为 O(e)(e 为图中边的个数),从而统计所有结点的入度的时间复杂度为 O(n*e)(n 为图中顶点个数),这显然是 是与图 7.2(a)相对应的逆邻接表,根据逆邻接表,易统计出图中每个结点的入度。
◆ 在 无 向 图 的 邻 接 表 中 , 顶 点 vi 的 度 恰 为 第 i 个 链 表 中 的 结 点 数。
◆ 在 有 向 图 中 , 第 i 个 链 表 中 的 结 点 个 数 只 是 顶 点 vi 的 出 度 。 在 逆 邻 接 表 中 的 第 i 个 链 表 中 的 结 点 个 数 为 vi 的 入 度 。
用顺序存储方式存储图的顶点表 n-1,每个顶点的结构如图 7.5 所示
图 7.5 顶点结点
VerName adjacent
其中,VerName 域存放该顶点的名称,adjacent 域是指针域,存放指向 VerName 的边链表的头 adjacent 域存放的是顶点 VerName 的边链表的头指针。
具体的图结构和欲实施的操作 7.2.1.1 邻接矩阵
用顺序方式或链接方式存储图的顶点表 V0,V1,...Vn-1 ,图的边用 n*n 阶矩阵 A=(aij)表示,A 的定
(a) 若图为权图,aij 对应边<Vi,Vj>的权值;
(b) 若图为非权图,则 (1) aij =0; (2) aij =1, 当 i≠j, 且<Vi,Vj>存在时; (3) aij=∝,当且Fra Baidu biblioteki≠j, 且<V ,V i j< /SUB> >不存在时。
VerAdj cost
link
图 7.4 边结点 其中,VerAdj 域存放 V 的某个邻接顶点在顶点表中的序号;cost 域存放边<V,VerAdj>的权值;link 域存放指向 点显示的是边<V,VerAdj>的信息,因此称之为边结点。
对于无权图,边没有权值,边结点也就不需要包含 cost 域,所以边结点由两个域 VerAdj 和 l
称矩阵 A 为图的邻接矩阵。
显然,无向图的邻接矩阵是对称矩阵 .
上图所对应的邻接矩阵如下:
7.2.1.2 邻接表 我们首先给出边链表的概念:与顶点 V 邻接的所有顶点以某种次序组成的一 中,其结点结构如图 7.4 所示:
VerAdj cost link 7.4 边结点
其中,VerAdj 域存放 V 的某个邻接顶点在顶点表中的序号;cost 域存放边<V,VerAdj>的权值 的指针。显然,边链表结点显示的是边<V,VerAdj>的信息,因此称之为边结点。
◆ 建 立 邻 接 表 的 时 间 复 杂 度 为 O(n+e)。
对于无权图,边没有权值,边结点也就不需要包含 cost 域,所以边结点由两个域 VerAdj 和 l 用顺序存储方式存储图的顶点表 n-1,每个顶点的结构如图 7.5 所示
7.5 顶点结点
VerName adjacent
其中,VerName 域存放该顶点的名称,adjacent 域是指针域,存放指向 VerName 的边链表的头 adjacent 域存放的是顶点 VerName 的边链表的头指针。
顶点 i 的边。
接表
(a) 邻 接 表
(b) 逆 邻
图 7-6
四、邻接表小结 ◆ 设图中有 n 个顶点,e 条边,则用邻接表表示无向图时,需
要 n 个 顶 点 结 点 , 2e 个 表 结 点 ; 用 邻 接 表 表 示 有 向 图 时 , 若 不 考 虑 逆邻接表,只需 n 个顶点结点,e 个边结点。
info
头结点
data
firstarc
二、无向图的邻接表
图 7-5
三、有向图的邻接表和逆邻接表 (一)在有向图的邻接表中,第 i 个单链表链接的边都是顶点 i
发出的边。 (二)为了求第 i 个顶点的入度,需要遍历整个邻接表。因此可
以建立逆邻接表。 (三)在有向图的逆邻接表中,第 i 个单链表链接的边都是进入
有多种方法可以用来存储图的顶点集 V 和边集 E . 在本节中,我们介绍其中的两种存储方式。究竟应选取哪 的操作
7.2.1.1 邻接矩阵 用顺序方式或链接方式存储图的顶点表 V0,V1,...Vn-1 ,图的边用 n*n 阶矩阵 A=(aij)表示,A 的定 (a) 若图为权图,aij 对应边<Vi,Vj>的权值;
本节开始时我们曾提到,用邻接矩阵还是用邻接表来存储图,要视对具体的图实施的具体操作而定。
对于边很多的图,适于用邻接矩阵存储,因为占用的空间少;而对于顶点多而边少的图,若用邻接矩阵存 利用率很低。因此,顶点多而边少的图适于用邻接表存储。
7.2.1 存储结构 有多种方法可以用来存储图的顶点集 V 和边集 E . 在本节中,我们介绍其中的两种存储方式。
相关文档
最新文档