数据结构讲义7
数据结构 第七章 章节重点概要三
![数据结构 第七章 章节重点概要三](https://img.taocdn.com/s3/m/eb8e323cee06eff9aef80756.png)
活动a4 e (4)=ve(2)=3 l (4)=vl (5)-1=6
活动a5 e (5)=ve(3)=4 l (5)=vl (5)-3=4
活动a6 e (6)=ve(3)=4 l (6)=vl (6)-5=14
活动a7 e (7)=ve(4)=5 l (7)=vl (7)-6=15
ptr=G->adjlist[j].firstedge;
while (ptr!=null)
{ k=ptr->adjvex;
G->adjlist[k].count--;/*当前输出顶点邻接点的入度减1*/
if(G->adjlist[k].count= =0)/*新的入度为0的顶点进栈*/
{G->adjlist[k].count =top;
(3)从汇点vn出发,令vl[n-1]=ve[n-1],按逆拓扑有序求其余各顶点的最迟发生时间vl[i](n-2≥i≥2);
(4)根据各顶点的ve和vl值,求每条弧s的最早开始时间e(s)和最迟开始时间1(s)。若某条弧满足条件e(s)=l(s),则为关键活动。
算法7.8求出了各事件的最早发生时间,Stack为栈;引用的函数FindInDegree(G, indegree)用来求图G中各顶点的入度,并将所求的入度存放于一维数组indegree中。
如果用AOE网来表示一项工程,那么,仅仅考虑各个子工程之间的优先关系还不够,更多关心的是:整个工程完成的最短时间是多少?哪些活动的延期将会影响整个工程的进度?而加速这些活动是否会提高整个工程的效率?
因此,通常在AOE网中列出完成预定工程计划所需要进行的活动,每个活动计划完成的时间,要发生哪些事件以及这些事件与活动之间的关系,从而可以确定该项工程是否可行,估算工程完成的时间以及确定哪些活动是影响工程进度的关键。
数据结构第七章 排序
![数据结构第七章 排序](https://img.taocdn.com/s3/m/8e70dd3a376baf1ffc4fadbb.png)
name 张涛 赵亮
冯博远 王强 李燕
7.2
基本原理
插入排序
每次将一个待排序的对象,按其关键字大小, 插入到前面已经排序好的一组对象的适当位臵上, 直到对象全部插入为止。
直接插入排序(Insert Sort)
希尔排序(Shell Sort)
7.2.1
直接插入排序
R[1]---R[i-1]
08 08
16 16
第三次
08
16
21
25* 25
49
希尔排序中d(间隔量)的取法 Shell最初的方案是 d= n/2, d=d/2, 直到d=1; Knuth的方案是d= d/3+1;
其它方案有:都取奇数为好;d互质为好 等等。
希尔排序的稳定性
如序列: 21 25 排序后为:08 16
R[0]有两个作用:
其一: 进入查找循环之前,保存 R[i] 的副本,使之不至 于因记录的后移而丢失R[i]中的内容; 其二: 在 while 循环时,“监视”下标变量 j 是否越界, 一旦越界(j<0),R[0]自动控制while循环的结束, 从而 避免了在while 循环内的每一次都要检测 j 是否越界( 即 省略了循环条件j>=0)。 因此,把 R[0] 称为“监视哨”。
第七章 排 序
本章内容
排序的概念和有关知识
常用的几种排序方法的基本思想、排序过 程和算法实现 各种排序算法的时间复杂度分析
学生成绩表
学号 姓名 高数 英语 总分
005 010 002
018 004
Chen Lin Gao Hong Wang Na
ZhangYang Zhao Pen
84 69 90
数据结构第七章--图(严蔚敏版)
![数据结构第七章--图(严蔚敏版)](https://img.taocdn.com/s3/m/95431a3083c4bb4cf7ecd1f4.png)
8个顶点的无向图最多有 条边且该图为连通图 个顶点的无向图最多有28条边且该图为连通图 个顶点的无向图最多有 连通无向图构成条件:边 顶点数 顶点数-1)/2 顶点数*(顶点数 连通无向图构成条件 边=顶点数 顶点数 顶点数>=1,所以该函数存在单调递增的单值反 顶点数 所以该函数存在单调递增的单值反 函数,所以边与顶点为增函数关系 所以28个条边 函数 所以边与顶点为增函数关系 所以 个条边 的连通无向图顶点数最少为8个 所以28条边的 的连通无向图顶点数最少为 个 所以 条边的 非连通无向图为9个 加入一个孤立点 加入一个孤立点) 非连通无向图为 个(加入一个孤立点
28
无向图的邻接矩阵为对称矩阵
2011-10-13
7.2
图的存储结构
Wij 若< vi,vj > 或<vj,v i > ∈E(G)
若G是网(有权图),邻接矩阵定义为 是网(有权图), ),邻接矩阵定义为
A [ i,j ] = , 0或 ∞
如图: 如图:
V1
若其它
V2
3 4
2
V3
2011-10-13
C
A
B
D 2011-10-13 (a )
3
Königsberg七桥问题
• Königsberg七桥问题就是说,能否从某点出发 通过每桥恰好一次回到原地?
C
C
A B
.
A D
B
D (a)
2011-10-13
(b)
4
第七章 图
7.1 图的定义 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径
2011-10-13
《数据结构》讲义
![《数据结构》讲义](https://img.taocdn.com/s3/m/74e335d5680203d8ce2f2465.png)
《数据结构》讲义什么是数据结构计算机解题步骤:建立数学模型——设计解此数学模型的算法——编制程序——进行测试调整——解答。
其中建立数学模型的实质:找出操作对象之间的关系。
例1. 图书馆书目检索——对应线性关系例2. 博奕树——对应树型关系例3. 交叉路口交通灯管理——对应图状结构。
数据结构是一门研究非数值计算的程序设计问题中(地计算机的操作对象及它们之间的关系和操作等的学科。
位)数据结构的基本概念和术语1. 数据(Data)数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。
换句话说,数据是对客观事物采用计算机能够识别、存储和处理的形式所进行的描述;是计算机加工处理的对象。
包括数值、字符、声音、图象等。
2. 数据元素(Data Element)数据元素是组成数据的基本单位, 是数据集合的个体,在计算机中通常作为一个逻辑整体进行考虑和处理。
一个数据元素可由若干个数据项组成(Data Item)。
3. 数据对象(Data Object)数据对象是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={′A′,′B′,…,′Z′},表1-1所示的学籍表也可看作一个数据对象。
由此可看出,不论数据元素集合是无限集(如整数集)、有限集(如字符集),还是由多个数据项组成的复合数据元素(如学籍表),只要性质相同,都是同一个数据对象。
综上1~3所述,再分析数据概念:4. 结构(Data Structure)数据元素相互之间的关系称为结构( Structure ),有四种基本结构。
(1) 集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系。
(2) 线性结构:结构中的数据元素之间存在着一对一的线性关系。
(3) 树形结构:结构中的数据元素之间存在着一对多的层次关系。
(4) 图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系。
数据结构:第7章 图3-最小生成树
![数据结构:第7章 图3-最小生成树](https://img.taocdn.com/s3/m/b3b25ef8370cba1aa8114431b90d6c85ec3a88a1.png)
• 按照生成树的定义,n 个顶点的连通网络的生成树有 n
个顶点、n-1 条边。
即有权图
目标:
在网络的多个生成树中,寻找一个各边权值之和最小的
生成树。
构造最小生成树的准则 ❖ 必须只使用该网络中的边来构造最小生成树;
❖ 必须使用且仅使用n-1条边来联结网络中的n个顶点;
❖ 不能使用产生回路的边。
典型用途:
(b) u={1} w={2,3,4,5,6}
0 6 1 5
6
0
5
3
1 5 0 7 5 4
5
7
0
2
3 5 0 6
4 2 6 0
i
1234
closest[i] 1 1 1 1
lowcost[i] 0 6 1 5
56 11 ∞∞
closest用于存放顶点序号 lowest存放权值
15 4 6
1 25
3
54
5
6
(c ) u={1,3} w={2,4,5,6}
1
1
4
25
6
32
54
5
6
(d) u={1,3,6} w={2,4,5}
i
1234 5 6
closest[i] 1 3 1 1 3 3
lowcost[i] 0 5 0 5 5 4
i
1234 5 6
closest[i] 1 3 1 6 3 3
生
v3 v1
成
树 v4 v2
v1
0^ 1^ 0^ 1^
2.生成森林
若一个图是非连通图或非强连通图,但有若 干个连通分量或若干个强连通分量,则通过 深度优先搜索遍历或广度优先搜索遍历,不 可以得到生成树,但可以得到生成森林,且 若非连通图有 n 个顶点,m 个连通分量或强 连通分量,则可以遍历得到m棵生成树,合 起来为生成森林,森林中包含n-m条树边。
数据结构(Java语言描述)第七章 查找
![数据结构(Java语言描述)第七章 查找](https://img.taocdn.com/s3/m/78318bf3ac51f01dc281e53a580216fc700a53d0.png)
第七章 查找
目录
1 查找
2 静态查找表
第七章 查找
动态查找表 哈希表 小结
总体要求
•掌握顺序查找、折半查找的实现方法; •掌握动态查找表(包括:二叉排序树、二叉平衡树 、B-树)的构造和查找方法; •掌握哈希表、哈希函数冲突的基本概念和解决冲突 的方法。
7.1基本概念
1、数据项 数据项是具有独立含义的标识单位,是数据不可分 割的最小单位。 2、数据元素 数据元素数是据由项若(名干) 数据项构成的数据单位,是在某
}
性能分析:i 0 1 2 3 4
5 13 19 21 37
Ci 3 4 2 3 4
查找成功:
比较次数 = 路径上的结点数
比较次数 = 结点 4 的层数
比较次数
2
56 7 56 64 75 1 34
判定树
5
8 9 10 80 88 92 2 34
查找37 8
树的深度
0
3
6
9
≤=
log2n +1
1
4
}
【算法7-1】初始化顺序表 public SeqTable(T[] data,int n){
elem=new ArrayList<ElemType<T>>(); ElemType<T> e; for(int i=0;i<n;i++){
e=new ElemType<T>(data[i]); elem.add(i, e); } length=n; }
前者叫作最大查找长度(Maximun Search Length),即 MSL。后者叫作平均查找长度(Average Search Length) ,即ASL。
数据结构:第7章 图4-拓扑排序和关键路径
![数据结构:第7章 图4-拓扑排序和关键路径](https://img.taocdn.com/s3/m/7b161721bb1aa8114431b90d6c85ec3a87c28ba1.png)
拓扑排序算法
拓扑排序方法: (1)在AOV网中选一个入度为0的顶点(没有前驱) 且输出之; (2)从AOV网中删除此顶点及该顶点发出来的所 有有向边; (3)重复(1)、(2)两步,直到AOV网中所有 顶点都被输出或网中不存在入度为0的顶点。
从拓扑排序步骤可知,若在第3步中,网中所有顶 点都被输出,则表明网中无有向环,拓扑排序成功。 若仅输出部分顶点,网中已不存在入度为0的顶点, 则表明网中有有向环,拓扑排序不成功。
拓扑序列:C1--C2--C3 (3)
C12 C9 C10
C7 C8 C6
C11
拓扑序列:C1--C2--C3--C4 (4)
C7
C12
C12
C8
C8 C9 C10
C6
C9 C10
C6
C11
C11 拓扑序列:C1--C2--C3--C4--C5
(5)
拓扑序列:C1--C2--C3--C4--C5--C7 (6)
在 (b)中,我们用一种有向图来表示课程开设
拓扑排序
1.定义 给出有向图G=(V,E),对于V中的顶点的线性序列 (vi1,vi2,...,vin),如果满足如下条件:若在G中从 顶点 vi 到vj有一条路径,则在序列中顶点vi必在 顶点 vj之前;则称该序列为 G的一个拓扑序列。 构造有向图的一个拓扑序列的过程称为拓扑排序。 2.说明 (1)在AOV网中,若不存在回路,则所有活动可排成 一个线性序列,使得每个活动的所有前驱活动都排 在该活动的前面,那么该序列为拓扑序列. (2)拓扑序列不是唯一的.
2.AOV网实际意义
现代化管理中, 通常我们把计划、施工过程、生产流程、 程序流程等都当成一个工程,一个大的工程常常被划分 成许多较小的子工程,这些子工程称为活动。在整个工 程实施过程中,有些活动开始是以它的所有前序活动的 结束为先决条件的,必须在其它有关活动完成之后才能 开始,有些活动没有先决条件,可以 安排在任意时间开 始。AOV网就是一种可以形象地反映出整个工程中各个 活动之间前后关系的有向图。例如,计算机专业学生的 课程开设可看成是一个工程,每一门课程就是工程中的 活动,下页图给出了若干门所开设的课程,其中有些课 程的开设有先后关系,有些则没有先后关系,有先后关 系的课程必须按先后关系开设,如开设数据结构课程之 前必须先学完程序设计基础及离散数学,而开设离散数 学则必须先并行学完数学、程序设计基础课程。
数据结构导论 第七章 文件
![数据结构导论 第七章 文件](https://img.taocdn.com/s3/m/db1d3515a21614791711282f.png)
二、顺序文件的检索方法
当需要对磁带顺序文件进行检索时,一般是采用顺序扫描的 方式来检索满足查询条件的记录。例如,若要检索第i个记录,则 必须先检索前面的i-1个记录。为了提高平均检索效和排序,则 形成一个称为待办文件(或事务文件)的文件。如果将被查询的 文件称为主文件,则批量检索就是按照待办文件的要求成批地检 索主文件。批量检索对于实时应用来说是不适宜的,因为实时查 询要求响应时间快,而在很短的时间间隔内,积累的批处理文件 规模太小,不能表现出它的优越性。
9
7.2 顺序文件
一、顺序文件
——指按记录进入文件的先后顺序存放、其逻辑顺序 和物理顺序一致的文件。 即
顺序文件是物理结构最简单的文件,也是数据处理历史上最早使 用的文件结构。顺序文件的各个记录按输入的先后次序存放在外存中 的连续存储区。为了便于检索和修改文件,文件中的记录通常按关键 字的大小次序排列,成为按关键字排序的顺序文件。 顺序文件的基本优点是在连续存取时速度较快。例如,如果文件 中的第i个记录刚被存取过,而下一个要存取的记录就是第i+1个记录, 则此次存取将会很快完成。磁带是比较适用于这种应用的外存设备。 存放于磁带上的文件也只能是顺序文件,这是由磁带的物理特性决定 的。存放于磁盘上的文件,既可以是顺序文件,也可以是索引结构或 其它结构类型的文件。
13
四、索引文件的存储
索引文件在存储器上分为两个区:索引区和数据 区。索引区存放索引表,数据区存放主文件 通常,索引项所含的数据信息比记录少得多,因 而索引所需的存储空间比文件本身(记录区)所需要 的存储空间少得多。在文件的记录数较少的情况下, 可以为每个记录建立一个索引项。文件建立时,开辟 一个索引区,一般固定在某个磁盘面的一个或多个磁 道上。写入一个记录到记录区时,在索引区相应登入 一个索引项,即把该记录的关键字(主关键字)和记 录的存储地址顺序写入索引区。文件建立后,将索引 区中的索引读入内存的缓冲区,按关键字进行内部排 序。最后将排序好的索引项顺序写回到磁盘上的索引 区。
数据结构 (C语言版)课件:第7章_图
![数据结构 (C语言版)课件:第7章_图](https://img.taocdn.com/s3/m/aa7e3bf0336c1eb91a375dc5.png)
2020/9/30
3
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 无向图和有向图
● 无向图:如果图中顶点 vi 和 vj 之间的边无方向,则称这条边为无向边, 用无序偶对 (vi, vj) 表示,称该图为无向图。
● 有向图:如果图中顶点 vi 和 vj 之间的边有方向,则称这条边为有向边, 用有序偶对 <vi, vj> 表示,称该图为有向图。
无论有向图还是无向图,顶点数 n、边 数 e 和度数之间满足:
2020/9/30
8
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 权和网
● 权:权通常是指对图中边赋予的有意义的数值量。在实际应用中,权 可以有具体的含义。
● 网:如果将图中的每条边上都赋上一个权值,则称这种图为网,或称 为有权图 。
2020/9/30
6
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 稀疏图和稠密图
● 稀疏图:边数很少的图称为稀疏图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e<nlogn。
● 稠密图:边数很多的图称为稠密图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e≥nlogn。
2020/9/30
无向完全图
有向完全图
5
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 邻接和依附
● 邻接:对图 G=(V, VR),如果边 (vi, vj)∈VR,则称顶点 vi 和 vj 互为邻 接点;如果弧<vi, vj>∈VR,则称顶点 vi 邻接到 vj,vj 邻接自 vi。
● 依附:对图 G=(V, VR),如果边 (vi, vj)∈VR 或弧 <vi, vj>∈VR,则称 边 (vi, vj) 或弧 <vi, vj> 依附于顶点 vi 和 vj。
C与数据结构 第7次课--函数的定义、声明和调用
![C与数据结构 第7次课--函数的定义、声明和调用](https://img.taocdn.com/s3/m/9ef211ba960590c69ec376e2.png)
第7次课----函数的定义、声明和调用
第3章
又开始学习 新的一章了
《C语言与数据结构》
第7次课----函数的定义、声明和调用
函数调用的方式主要有三种情况: 函数语句:适合于无返回值的函数,或者不需要使 用返回值的函数。 例如: printf( “hello!” ); 函数表达式:出现在一个表达式中,此时使用函数 的返回值,并将此返回值作为运算对象参与表达式的 运算。 例如: c=3*max(a,b); 函数参数:将函数调用作为一个函数的实参。 例如: d=max( c, max(a,b) );
(7_2)
《C语言与数据结构》
第7次课----函数的定义、声明和调用
第3章
函数调用举例
【问题3】编写程序,实现求三个实数的最大数。
看源程序 (7_3) 运行程序 (7_3)
思考 将两个函数的位置前后交换一下,结果如何?
调用集成开发环境演示!
《C语言与数据结构》
第7次课----函数的定义、声明和调用
第3章
教案
教学主题 函数的定义、声明和调用 通过本次课的学习,使学生掌握函数的定义、 声明及调用方法,函数之间参数传递的方法。 1.函数的定义、声明及调用 2.函数的形参、实参、参数的传递 3.函数的返回值 1.函数的定义、声明及调用三者的区别 2.函数参数的传递方法
《C语言与数据结构》
教学目标
教学重点
《C语言与数据结构》
第7次课----函数的定义、声明和调用
《数据结构》讲义
![《数据结构》讲义](https://img.taocdn.com/s3/m/1e3e2e3f02d8ce2f0066f5335a8102d276a261a5.png)
《数据结构》讲义数据结构是计算机科学和编程中非常重要的概念之一。
它是指在计算机中存储和组织数据的方法和原则。
一、介绍数据结构在计算机科学领域中具有重要的地位。
它涉及到如何存储和组织数据,以便于对其进行检索和操作。
数据结构可以分为两种基本类型:线性结构和非线性结构。
线性结构包括数组、链表、栈和队列,而非线性结构包括树和图。
二、线性结构1. 数组数组是一种用来存储多个相同类型的元素的数据结构。
它具有固定长度和连续的内存空间。
数组可以通过索引访问元素,可以快速地插入和删除元素,但是其长度固定不变。
2. 链表链表是一种由节点组成的数据结构,每个节点都包含一个值和指向下一个节点的指针。
链表可以在任意位置插入和删除节点,但是访问节点的时间复杂度较高。
3. 栈栈是一种具有特定操作限制的线性结构。
它遵循“先进后出”的原则,即最后插入的元素最先被访问和删除。
栈可以用来实现递归、回溯和表达式求值等功能。
4. 队列队列也是一种具有特定操作限制的线性结构。
它遵循“先进先出”的原则,即最先插入的元素最先被访问和删除。
队列可以用来实现任务调度、缓冲区等功能。
三、非线性结构1. 树树是一种由节点组成的非线性结构。
它包含一个根节点和多个子节点,每个节点可以有任意数量的子节点。
树可以用来表示层次关系、排序和搜索等功能。
2. 图图是一种由节点和边组成的非线性结构。
节点表示实体,边表示节点之间的关系。
图可以用来表示网络、关系和路径等信息。
四、常用数据结构在实际编程中,还有一些常用的数据结构:1. 哈希表:通过哈希函数将元素映射到不同的位置,实现快速的查找和插入操作。
2. 堆:一种特殊的树结构,可以快速找到最大或最小的元素。
3. 二叉搜索树:一种有序的二叉树,可以高效地进行搜索和插入操作。
五、应用场景数据结构在实际开发中有广泛的应用场景,包括但不限于以下几个方面:1. 数据库系统中的索引结构:为了快速检索数据,数据库系统使用各种数据结构来组织数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
语
有向图 G1
A
B
无向图 G2
A
B
E
C
D
• 顶点:
A
B
• 有向边(弧)、弧尾或初 始结点、弧头或终止结点
A
B
• 有向图:G1 =(V1,A1) V1 = {A,B,C,D} A1 = {<A,B>, <A,C>, <C,D>, <D,A>}
C
• 顶点:
D
A
B
• 无向边或边
A
B
•无向图:G2 =(V2,A2) V2 = {A,B,C,D,E} A2 = {(A,B), (A,C),(B,D), (B,E),(C,E),(D,E)}
❖ 顶点的度 一个顶点v的度是与它相关联的边的条数。记作TD(v)。在
有向图中,顶点v的入度是以v为终点的有向边的条数, 记作 ID(v); 顶点 v的出度是以 v 为始点的有向边的条数, 记作OD(v)。
❖ 子图 设有两个图 G=(V, E) 和 G’=(V’, E’)。若 V’ V 且 E’ E, 则 称 图G’ 是 图G 的子图。
#define INFINITY
INT_MAX
#define MAX
20 //最大顶点数
typedef enum{ DG, DN, UDG, UDN} GraphKind;
typedef struct{
VertexType vexs[MAX];
//顶点数组
int
Edge[MAX][MAX]; //邻接矩阵
无向图G
A
B
EFG
H
IJ
K M
C
L D
无向图G的三个连通分量ABFG NhomakorabeaE
H
IJ
K
L
M
C
D
7.1 图的定义和术语
❖ 强连通图与强连通分量 在有向图中, 若对于每一对顶点vi 和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称此图是强连 通图。非强连通图的极大强连通子图叫做强连通分量。
有向图G
❖ 简单路径 若路径上各顶点 v1,v2,...,vm 均不互相重复, 则称这样的路径 为简单路径。
❖ 回路 若路径上第一个顶点 v1 与最后一个顶点vm 重合, 则称这样的路 径为回路或环。
7.1 图的定义和术语
❖ 路径长度
非带权图的路径长度是指此路径上边的条数。 带权图的路径长度是指路径上各边的权之和。 ❖ 连通图与连通分量 在无向图中, 若从顶点v1到顶点v2有路径, 则称顶点 v1与v2是连通的。如果图中任意一对顶点都是连通的, 则称此图是连通 图。非连通图的极大连通子图叫做连通分量。
杂度是O(n2+e·n), 其中对邻接矩阵G.arcs的初始 化耗费了O(n2)的时间。
7.2 图的存储结构
7.2.2 邻接表 (Adjacency List)
❖ 无向图的邻接表: 把同一个顶点发出的边链接在同一个边链表中,链表
的每一个结点代表一条边,叫做边结点,结点中保存有 与该边相关联的另一顶点的顶点下标 adjvex 和指向同 一链表中下一个边结点的指针 nextarc。
▪ 顶点表:用数组的形式存放所有的顶点及对应的边链表
的头指针。
▪ 边链表:每条边用一个结点进行表示。同一个结点的所
有的边形成它的边结点单链表。
▪ 在邻接表的边链表中,各个边结点的链入顺序任意,视
边结点输入次序而定。
7.2 图的存储结构
VNode
顶点数组
ArcNode
data firstarc
adjvex
7.1 图的定义和术 语
❖ 完全图 若有 n 个顶点的无向图有 n(n-1)/2 条边, 则此图为完全 无向图。有 n 个顶点的有向图有n(n-1) 条边, 则此图为完全有向 图。
❖ 权 某些图的边具有与它相关的数, 称之为权。带权图叫做网。
7.1 图的定义和术语
❖ 邻接顶点 如果 (u, v) 是 E(G) 中的一条边,则称 u 与 v 互为邻接顶 点。
A
B
有向图G的两个强连通分量
A
B
C
D
C
D
7.1 图的定义和术语
生成树 一个连通图的生成树是它的极小连通子图,包含 连通图的全部n个顶点,但只有构成一棵树的n-1条边。
无向图G
A
B
E
H
无向图G的生成树
A
B
E
H
M
C
D
M
C
D
7.2 图的存储结构
7.2.1 邻接矩阵 (数组表示法)
❖ 在图的邻接矩阵表示中,有一个记录各个顶点信 息的顶点表,还有一个表示各个顶点之间关系的 邻接矩阵。
列 1 的个数可得顶点 j 的入度。
7.2 图的存储结构
▪ 网(带权的图)的邻接矩阵
W (i,j), 如i果 !j且 <i,j E或 (i,j) E A .Ed[i]gj[]e = , 否但 则i是 !, =j
0, 对角 i=线 j=
7.2 图的存储结构
▪ 用邻接矩阵表示图时,除了存储用于表示顶点间相邻关系 的邻接矩阵外,还需要一个数组存储顶点。表示形式为:
7.1 图的定义和术
语
❖ 路径 在图 G=(V, E) 中, 若从顶点 vi 出发, 沿一些边经过一些顶点 vp1, vp2, …, vpm,到达顶点vj。则称顶点序列 ( vi vp1 vp2 ... vpm vj ) 为从顶点vi 到顶点 vj 的路径。它经过的边(vi, vp1)、(vp1, vp2)、...、(vpm, vj)应是属于 E的边。
边链表 nextarc
7.2 图的存储结构
❖ 有向图可以建立邻接表和逆邻接表: 1)在有向图的邻接表中,第 i 个边链表链接的边都是 顶点 i 发出的边。也叫做出边表。 2)在有向图的逆邻接表中,第 i 个边链表链接的边都 是进入顶点 i 的边。也叫做入边表。
❖ 设图 A = (V, E)是一个有 n 个顶点的图,则图的邻 接矩阵是一个二维数组 A.edge[n][n],定义:
A .Ed [i]jg [ ] e 1 0 ,, 否 如 < i,则 果 j> E 或(i,者 j) E
❖ 无向图的邻接矩阵是对称的,有向图的邻接矩阵 可能是不对称的。
❖ 在无向图的邻接矩阵中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。 ❖ 在有向图的邻接矩阵中, 统计第 i 行 1 的个数可得顶点 i 的出度,统计第 j
int
vexnum;
//顶点数
int
arcnum;
//边数
GraphKind
kind;
//图的类型
} Mgraph;
7.2 图的存储结构
▪ 算法7.1(P162)是在邻接矩阵存储结构MGraph上 对图的构造操作的实现框架,它根据图G的种类调 用具体构造算法。 若G是无向网,则调用算法7. 2(P162) ▪ 构造一个具有n个顶点和e条边的无向网G的时间复