数据结构——图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
间都有路径,则称此图为连通图。
(12) 连通分量:若无向图为非连通图,则图
中各个极大连通子图称作此图的连通分量。
B A F
连通图
C D E A
B
C D
F
E
非连通图
(13) 强连通图:在有向图中,若每一对顶点
u和v之间都存在v到u及u到v的路径,则称此
图为强连通图。
(14) 强连通分量:各个强连通子图称作该有
struct arcnode {
int adjvex;
float data;
struct arcnode *nextarc;
};
typedef struct arcnode ARCNODE;
struct headnode {
int vexdata; ARCNODE *firstarc;
} adjlist[VTXUNM];
• 示例:无向图的邻接表
0 1 2 3 4 5
A B C D E F
1 0 3 2 0 1
4 4 5 5 1 2
5 A
B
C D
3
F
E
有向图的邻接表
A B D 0 1 2 34
A
B
1
2
3
C
E
C
D
4 2
0 1
在有向图的邻接表中不易 找到指向该顶点的弧,即 难以确定某个顶点的入度。
向图的强连通分量。
A
B C F E B C
A
E F
强连通图
非强连通图
B A F
C D E B C
A
E F
TD(B) = 3,TD(A) = 2
ID(B) = 2,OD(B) = 1 TD(B)=ID(B)+OD(B ) =3
基本操作
建立和销毁图结构 访问顶点
பைடு நூலகம்
插入或删除顶点
插入和删除弧
对邻接点的操作
5.1 图的基本概念
图是一种重要的,比树更复杂的非线性数据结构。 在树中,每个结点只与上层的父结点有联系,并 可以与其下层的多个子结点有联系。但在图中, 结点之间的联系是任意的,每个结点都可以与其 它的结点相联系。 图的应用极为广泛,特别是近年来发展迅速,已 渗入到诸如语言学、逻辑学、物理、化学、电信 工程、计算机、数学及其它分支中。
E
有向图的逆邻接表
在有向图的逆邻接表
中,每个顶点链接的 0 A
3
3 1 2 0 0 4
是指向该顶点的弧。
1 B
2 C
A B E
3 D
4 E
C
D
有向带权图的邻接表
A 3 B 7 C (a) (b) 4 A 1 B 2 C 3 2 1 3 4 3 7
一、图的数组(邻接矩阵)存储表示 定义:矩阵的元素为
0 若(Vi,Vj)或<Vi,Vj>E(G) Aij= 1 若(Vi,Vj)或<Vi,Vj>E(G)
{
A
B
C
D
E
F
B A F
C D E
A
0 B 1 C 0 D 0 E 1 F 0
1 0 0 0 1 1
0 0 0 1 0 1
0 0 1 0 0 1
遍历图
5.2 图的存储结构
图的存储结构
一、图的数组(邻接矩阵)存储表示 二、图的邻接表存储表示
*三、有向图的十字链表存储表示 *四、无向图的邻接多重表存储表示
根据图的定义可知,一个图的逻辑结构分两部 分,一部分是组成图的顶点的集合;另一部分 是顶点之间的联系,即边或弧的集合。 可用一个一维数组存放图中所有顶点的信息; 用一个二维数组来存放数据元素之间的关系的 信息(即边或弧的集合E)。这个二维数组称之为 邻接矩阵。 邻接矩阵是表示顶点之间的邻接关系的矩阵。 设G =(V,E)是有n(n≥1)个顶点的图,则G的邻 接矩阵A是一个n×n阶矩阵。
图的定义及相关术语
(1) 图的定义:图G由两个集合V(G)和E(G)所 组成,记作G=(V, E)。其中,V(G)是图中顶 点的非空有限集合,E(G)是图中边的有限 集合。 (2) 有向图。如果图中每条边都是顶点的有序 对,即每条边都用箭头表明了方向,则此 图为有向图。有向图中的边也称为弧,用 尖括号括起一对顶点表示。
在邻接表中,对图中每个顶点建立一个单链 表,第i个单链表中的结点包含了顶点Vi的所 有邻接顶点。每个结点由三个域组成: adjvex、data和nextarc,如下图所示。
adjvex
data
nextarc
指向顶点Vi的下一邻接点的指针
权值 顶点Vi的邻接点在图中的位置
邻接表中表结点的结点结构
为便于邻接表操作,在每个单链表上附设一 个头结点,在头结点中有两个域:vexdata和 firstarc。如下图所示。
(6)完全图。假设图中有 n 个顶点,e 条
边,则含有 e=n(n-1)/2 条边的无向图称
作完全图;含有 e=n(n-1) 条弧的有向图
称作有向完全图。
(7) 稠密图与稀疏图。若图的边或弧的数
目接近于相应完全图的边或弧的数目,
则称之为稠密图,否则称为稀疏图。
(9) 简单路径:序列中顶点不重复出现的路径。 (10) 简单回路:序列中第一个顶点和最后一 个顶点相同的简单路径。 (11) 连通图:在无向图中,若每一对顶点之
vexdata firstarc
指向顶点Vi的第一个邻接点的指针 存储Vi的名字或有关信息
邻接表中头结点的结点结构
为了利用顺序存储结构的随机访问特性,邻接 表中将每个单链表的头结点以顺序结构的形式 存储,以便能随机访问任一顶点的单链表。
邻接表的存储结构可以用C语言描述如下: #define VTXUNM n /*n为图中顶点个数的最大可能值*/
使用邻接矩阵法容易判断任意两个点的邻 接关系。
网的邻接矩阵可定义为
Wij A[i, j]
若 (Vi , Vj )或
Vi , Vj E(G)
反之
其中Wij是边(Vi, Vj)或弧< Vi, Vj>上的权值。
二、图的邻接表存储表示
邻接表是一种顺序分配和链式分配相结合的 存储结构。它包括两个部分:一部分是链表; 另一部分是向量。
1 1 0 0 0 0
0 1 1 1 0 0
有向图的邻接矩阵
A B C D E
0
1 0
0 1
1 0
0 0
A
0
B
C E
D
0
0 1
0
0 1
0
1 0
0
0 0
1
0 0
特点
无向图的邻接矩阵是对称的;
有向图的邻接矩阵不一定对称。
对于无向图,邻接矩阵第i行(或第i列)的元 素之和是顶点Vi的度。 对于有向图,邻接矩阵第i行元素之和为顶 点Vi的出度;第i列的元素之和为顶点Vi的 入度。