数据结构课件第5章_图
数据结构课件第5章-PPT文档资料
第5章 串
5.2.2
和线性表的链式存储结构相类似,串的存储结构也可采用链 式存储结构,即用线性链表来存储串值。在这种存储结构下,存 储空间被分成一系列大小相同的结点,每个结点用data域存放字 符, link域存放指向下一个结点的指针。 这样, 一个串就可以用 一个线性链表来表示。
private { private declaration }
public { public declaration }
end;
第5章 串
这一段程序可看作一个字符串:“type private
Tstring = class
{private declaration } public {public declaration } end;
”, 其中“ ”表示换行符。Delphi的源程序编辑器提供了字符 串的查找与替换功能。 选择“Search”菜单中的“Replace”项, 在对话框中输入要查找字符串‘private’及替代串‘protected’, 如 图 5.1 所 示 , 则 执 行 命 令 后 以 上 程 序 中 的 关 键 字 ‘ private’ 被 ‘protected’替代。
第5章 串 串中任意个连续的字符组成的子序列称为该串的子串。包含 子串的串称为主串。通常称字符在序列中的序号为该字符在串中 的位置。子串在主串中的位置可以用子串的第一个字符在主串中 的位置来表示。
例如, 假设a、 b、 c、 d为如下的四个串:
a =‘Data’
b =‘Structure’
c =‘Data Structure’ d =‘Data Structure’
const maxlen = 允许的串最大长度;
《数据结构——用C语言描述(第二版)》第5章 数组和广义表
第五章 数组和广义表
在压缩存储时,矩阵中值相同的元素C可共享一个存储空间,元素 为零则可不必分配空间,而其余的元素有 n(n+1)/2个,因此三角矩阵 可用一维数组M[n×(n+1)/2+1]来存储,其中常数C放在数组的最后一 个下标变量中。
假设A和B矩阵分别用matrix型指针变量a和b表示,矩阵的转置可以 按以下进行:由于B的行是A的列,所以可按照b->data三元组表的次序在 a->data中找到相应的三元组进行转置,即可按a->data的列序转置,所得 到的转置矩阵B的三元组表b->data必定是按行优先存放的。因此,可以对 三元组表a->data从第一行起扫描,找到A的每一列中所有的非零元素,就 可以实现转置。
LOC ( aij ) =LOC ( a00) +(i×n+j) × c 同理可推导出以列为主序优先存储时数据元素a i j 的存储地址,其计算公式 为:
LOC( a i j ) =LOC( a00 ) +( j × n +i ) × c 对于三维数组Am×n×p而言,若以行为主序优先存储时,则其数据元 素aijk的存储地址可为: LOC ( a i j k) =LOC ( a000) +[ i × m×p +j ×p +k] × c 对于一般的二维数组A[c1…d1,c2…d2]而言,此处c1,c2的值不一定是 0,a i j 的地址为: LOC ( a i j ) =LOC ( a c 1 c 2 ) +[ ( i – c 1 )* ( d 2 – c 2 +1) +j – c 2 ] * c
数据结构ppt课件完整版
针对有序数据集合,每次通过中间元素将 待查找区间缩小为之前的一半,直到找到 元素或区间为空。
哈希查找
树形查找
通过哈希函数将数据映射到哈希表中,实 现快速查找。
如二叉搜索树、平衡树等,通过树形结构实 现高效查找。
排序算法分类及实现原理
插入排序
将待排序元素逐个插入到已排序序列中,直到所有元素均插入完毕。
由n(n>=0)个具有相同类型 的数据元素(结点)a1,a2,
...,an组成的有序序列。
同一性
每个元素必须是同一类型的数 据。
有序性
元素之间具有一对一的前驱和 后继关系,即除首尾元素外, 每个元素都有一个前驱和一个 后继。
可变性
线性表的长度可变,即可以插 入或删除元素。
顺序存储结构与链式存储结构比较
定义
用一段连续的存储单元依次存储线性 表的数据元素。
优点
可以随机存取表中任一元素,且存取 时间复杂度为O(1)。
顺序存储结构与链式存储结构比较
• 缺点:插入和删除操作需要移动大量元素,时间 复杂度高;需要预先分配存储空间,容易造成空 间浪费。
顺序存储结构与链式存储结构比较
定义
用一组任意的存储单元存储线性 表的数据元素(这组存储单元可 以是连续的,也可以是不连续的
查找操作
查找指定元素的位置。
遍历操作
访问线性表中的每个元素。
销毁操作
释放线性表占用的存储空间。
03
栈和队列
栈定义及特点
栈(Stack)是一种特殊的线性数据结构,其数据的存 取遵循后进先出(LIFO, Last In First Out)的原则。 栈的特点
具有记忆功能,能保存数据的状态。
栈的基本操作包括入栈(push)、出栈(pop)、查 看栈顶元素(top)等。 只能在栈顶进行数据的插入和删除操作。
《数据结构与算法设计》第5章 树
5.2.2 二叉树的性质
➢ 满二叉树和完全二叉树
满二叉树是指深度为h且节点数取得最大值2h-1的二叉树。 如果一棵深度为h的二叉树,除第h层外,其他每层的节点数 都达到最大,且最后一层的节点自左而右连续分布,这样的二 叉树称为完全二叉树。
5.2.2 二叉树的性质
5.2.2 二叉树的性质
性质6 对含有n个节点的完全二叉树自上而下、同一层从左往右 对节点编号0,1,2,…,n-1,则节点之间存在以下关系: (1)若i=0,则节点i是根节点,无双亲;若i>0,则其双亲节 点的编号为i/2-1; (2)若2×i +1≤n,则i的左孩子编号为2×i+1; (3)若2×i+2≤n,则i的右孩子编号为2×i+2; (4)若i>1且为偶数,则节点i是其双亲的右孩子,且有编号为 i-1的左兄弟; (5)若i<n-1且为奇数,则节点i是其双亲的左孩子,且有编号 为i+1的右兄弟。
5.3.3 二叉树的二叉链表类模板定义
//根据二叉树的先序遍历序列和中序遍历序列创建以r为根的二叉树
void CreateBinaryTree(BTNode<DataType> * &r, DataType pre[], DataType
in[], int preStart, int preEnd, int inStart, int inEnd); int Height(BTNode<DataType> *r); //求以r为根的二叉树高度 //求以r为根的二叉树中叶子节点数目
5.1.2 树的术语
(9)节点的层次:从根节点开始,根为第一层,根的孩子为 第二层,根的孩子的孩子为第三层,依次类推,树中任一节 点所在的层次是其双亲节点所在的层次数加1。 (10)堂兄弟:双亲在同一层的节点互为堂兄弟。
数据结构第5章
第5章:数组和广义表 1. 了解数组的定义;填空题:1、假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 288 B ;末尾元素A 57的第一个字节地址为 1282 。
2、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。
2. 理解数组的顺序表示方法会计算数组元素顺序存储的地址;填空题:1、已知A 的起始存储位置(基地址)为1000,若按行存储时,元素A 14的第一个字节地址为 (8+4)×6+1000=1072 ;若按列存储时,元素A 47的第一个字节地址为 (6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A 57可知,是从0行0列开始!) 2、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950 。
答:不考虑0行0列,利用列优先公式: LOC(a ij )=LOC(a c 1,c 2)+[(j-c 2)*(d 1-c 1+1)+i-c 1)]*L 得:LOC(a 32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950选择题:( A )1、假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。
(无第0行第0列元素)A .16902B .16904C .14454D .答案A, B, C 均不对 答:此题(57列×60行+31行)×2字节+10000=16902( B )2、设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素a i,j (i ≤j), 在一维数组B 中下标k 的值是:A .i(i-1)/2+j-1B .i(i-1)/2+jC .i(i+1)/2+j-1D .i(i+1)/2+j3、从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
数据结构第五章
5.3.1 特殊矩阵
是指非零元素或零元素的分布有一定规律的矩阵。
1、对称矩阵 在一个n阶方阵A中,若元素满足下述性质: aij = aji 0≦i,j≦n-1 则称A为对称矩阵。
对称矩阵中的元素关于主对角线对称,故只 要存储矩阵中上三角或下三角中的元素,这样, 能节约近一半的存储空间。
2013-7-25 第4章 18
5.3 矩阵的压缩存储
在科学与工程计算问题中,矩阵是一种常用 的数学对象,在高级语言编制程序时,常将 一个矩阵描述为一个二维数组。 当矩阵中的非零元素呈某种规律分布或者矩 阵中出现大量的零元素的情况下,会占用许 多单元去存储重复的非零元素或零元素,这 对高阶矩阵会造成极大的浪费。 为了节省存储空间,我们可以对这类矩阵进 行压缩存储:
5.2 数组的顺序表示和实现 由于计算机的内存结构是一维的, 因此用一维内存来表示多维数组,就必 须按某种次序将数组元素排成一列序列 ,然后将这个线性序列存放在存储器中 。 又由于对数组一般不做插入和删除 操作,也就是说,数组一旦建立,结构 中的元素个数和元素间的关系就不再发 生变化。因此,一般都是采用顺序存储 的方法来表示数组。
即为多个相同的非零元素只分配一个存储空间; 对零元素不分配空间。
课堂讨论: 1. 什么是压缩存储? 若多个数据元素的值都相同,则只分配一个元素值的 存储空间,且零元素不占存储空间。 2. 所有二维数组(矩阵)都能压缩吗? 未必,要看矩阵是否具备以上压缩条件。 3. 什么样的矩阵具备以上压缩条件? 一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵, 稀疏矩阵等。 4. 什么叫稀疏矩阵? 矩阵中非零元素的个数较少(一般小于5%)
通常有两种顺序存储方式:
⑴行优先顺序——将数组元素按行排列,第i+1个行 向量紧接在第i个行向量后面。以二维数组为例,按 行优先顺序存储的线性序列为: a11,a12,…,a1n,a21,a22,…a2n,……,am1,am2,…,amn 在PASCAL、C语言中,数组就是按行优先顺序存 储的。 ⑵列优先顺序——将数组元素按列向量排列,第j+1 个列向量紧接在第j个列向量之后,A的m*n个元素按 列优先顺序存储的线性序列为: a11,a21,…,am1,a12,a22,…am2,……,an1,an2,…,anm 在FORTRAN语言中,数组就是按列优先顺序存储的。
《算法与数据结构》PPT课件
精选ppt
11
1.数据的逻辑结构
• 所谓数据的逻辑结构,是指描述数据元素之间 逻辑关系的数据结构。数据的逻辑结构由某一 数据对象及该对象中所有数据成员之间的关系 (前后件关系)组成。即一个数据结构可以表 示成:
精选ppt
15
5.1.4 线性结构与非线性结构
• 空的数据结构:如果在一个数据结构中一个数 据元素都没有,则称该数据结构为空的数据结 构。
• 在一个空的数据结构中插入一个新的元素后就 变为非空的数据结构。
• 根据数据元素之间关系的不同特性,一般将数 据结构分为两大类型:线性结构与非线性结构。
精选ppt
B = (D, R) D ={春,夏,秋,冬} R ={(春,夏),(夏,秋),(秋, 冬)}
精选ppt
14
2.数据的物理结构
• 数据的物理结构:数据的逻辑结构在计算机中 的存储方式称为数据的物理结构。它包括数据 元素的存储方式和关系的存储方式。
• 一种数据的逻辑结构根据需要可以表示成多种 存储结构,常用的存储结构有顺序、链接、索 引等存储结构。采用不同的存储结构,其数据 处理的效率是不同的 。
精选ppt
7
5.1.3 数据结构
• 数据处理,是指对数据集合中的各元素以各种 方式进行操作,包括插入、删除、查找、更改 等,也包括对数据元素进行分析。
• 数据的组织方式不同,通常对它进行处理时的 效率也不同。如:对两个存放相同元素的表进 行查找时,一个表中的所有数据元素是没有规 律的,而另外一个表中的元素是经过排序的, 则对于前者用顺序查询法进行查找,后者采用 折半查询法进行查询,可见后者效率较高。
严蔚敏版数据结构第五章
5
N维数组的数据类型定义
n_ARRAY = (D, R)
其中:
数据对象:D = {aj1,j2…jn| ji为数组元素的第i 维下标 ,aj1,j2…jn Elemset} 数据关系:R = { R1 ,R2,…. Rn } Ri = {<aj1,j2,…ji…jn , aj1,j2,…ji+1…jn >| aj1,j2,…ji…jn , aj1,j2,…ji+1…jn D } 基本操作:构造数组、销毁数组、读数组元素、写数组元素
6的每个元素占五个字节将其按列优先次序存储在起始地址为1000的内存单元中则元素a55的地址是南京理工大学2001一1315分12102二维数组m的元素是4个字符每个字符占一个存储单元组成的串行下标k的范围从0到4列下标j的范围从0到5m按行存储时元素m35的起始地址与m按列存储时元素m43的起始地址相同
10
二维数组
三维数组
行向量 下标 i 列向量 下标 j
页向量 下标 i 行向量 下标 j 列向量 下标 k
11
三维数组
– 各维元素个数为 m1, m2, m3 – 下标为 i1, i2, i3的数组元素的存储地址: – (按页/行/列存放)
LOC ( i1, i2, i3 ) = a + ( i1* m2 * m3 + i2* m3 + i3 ) * l 前i1页总 第i1页的 元素个数 前i2行总
前i行元素总数 第i行第j个元素前元素个数
24
若 i j,数组元素A[i][j]在数组B中的存 放位置为 n + (n-1) + (n-2) + + (n-i+1) + j-i = = (2*n-i+1) * i / 2 + j-i = = (2*n-i-1) * i / 2 + j 若i > j,数组元素A[i][j]在矩阵的下三角 部分,在数组 B 中没有存放。因此,找它 的对称元素A[j][i]。 A[j][i]在数组 B 的第 (2*n-j-1) * j / 2 + i 的位置中找到。
【2019年整理】数据结构课件第5章
if (pos >maxlen) or (pos < 1) or (s.curlen = maxlen) then showmessage(’error’)
else begin {若插入位置超出串s的长度, } if pos > s.curlen then pos:= s.curlen; {则将其调整至串s的末尾} if s.curlen+t.curlen<maxlen then len:= s.curlen+t.curlen else len:=maxlen; {计算新串长}
为串的长度。 零个字符的串称为空串(null string),长度为零。
第5章 串
串中任意个连续的字符组成的子序列称为该串的子串。包含
子串的串称为主串。通常称字符在序列中的序号为该字符在串中 的位置。子串在主串中的位置可以用子串的第一个字符在主串中 的位置来表示。 例如, 假设a、 b、 c、 d为如下的四个串: a =‘Data’ c =‘Data Structure’ b =‘Structure’ d =‘Data Structure’
一个线性链表来表示。
由于串结构的特殊性,在串的链表结构中常常涉及到结点的
大小问题,即如何确定结点的data域存放字符的个数问题。 通常
情况下,结点的大小为4或1,如图5.3所示。当结点的大小为4时, 串所占用的结点中最后一个结点的 data域不一定全被串值占满,
这时通常补上“#”或其他的非串值字符。
第5章 串
第5章 串
5.1 串的应用实例及概念
5.2 串的存储结构 5.3 串的基本操作 5.4 串的ADT定义及类定义 5.5 实习五:串的演示程序
第5章 串
5.1 串的应用实例及概念
大学数据结构课件--第5章 数组和广义表
a 32 a 33 a 34 0 0
a 43 a 44 a 45 0
a 54 a 55 a 56 a 65 a 66
5.3.2 稀疏矩阵
稀疏矩阵的存储:如何表示非零元素的位置信息 1. 三元组表:每个元素用一个三元组(i,j,v)来表示。 i j v
0 1 6 1 1 6 2 3 8 12 9
2
3 4 5 6 7 8
2
5.2 数组的顺序表示和实现
a00 a00 a10 a01 存储单元是一维结构,而数组是个多维结构 , …… …… 则用一组连续存储单元存放数组的数据元素就有 am-1,0 a0,n-1 个次序约定问题。 a01 a10
a11
……
a11
……
二维数组可有两种存储方式: am-1,1 a1,n-1
……
K=
i*n-i(i-1)/2+j-i n(n+1)/2
当 i≤j 当i>j
0 a11 ... a1n-1 ... ... ... ... 0 0 0 an-1n-1
当i ≤ j时,a[i][j]是非零元素, a[i][j]前面有i行,共有n+(n-1)+(n-2)+…(n-(i-1))
=i(n+[n-(i-1)])/2=i*n-i(i-1)/2个元素,a[i][j]前面有j列,共j-i个非零元素,
A m× n
( a10 a11 … a1,n-1 )
=
注:
( … … …… ) ( am-1,0 am-1,2 … am-1,n-1 ) ( ( ( (
① 数组中的元素都具有统一的类型; ② 数组元素的下标一般都具有固定的上界和下界,即数组一旦 被定义,它的维数和维界就不再发生改变; ③ 数组的基本操作简单:初始化、销毁、存取元素和修改元素值
数据结构第五章 数组和广义表
5.3.1
特殊矩阵
1、对称矩阵 在一个n阶方阵A中,若元素满足下述性质: aij = aji 1≤i,j≤n 则称A为对称矩阵。 a11 1 5 1 3 7 a21 a 22 5 0 8 0 0 a31 a32 a33 1 8 9 2 6 ……………….. 3 0 2 5 1 an 1 a n 2 a n 3 …a n n 7 0 6 1 3
第5章
数组和广义表
5.1 数组的定义
5.2 数组的顺序表示和实现
5.3 矩阵的压缩存储
5.3.1 特殊矩阵
5.3.2 稀疏矩阵
5.4 广义表的定义
5.1 数组的定义
数组-----线性表的扩展 A =(a0,a1,a2,…,an-1)
a00 a10 ┇ Am×n= ai0 ┇ am-1,0 a01 … a0j … a11 … a1j … ┇ ai2 … aij … ┇ am-1,2 … am-1,j … a0,n-1 a1,n-1 ai,n-1 am-1,n-1 α0 α1 ┇ Am×n= α i ┇ α m-1
Assign( &A, e, index1, ..., indexn) 赋值操作 初始条件:A是n维数组,e为元素变量,随后是n个下标值。 操作结果:若下标不超界,则将e的值赋给所指定的A的元 素,并返回OK。 对于数组来说一旦维数确定了,每个元素的下标确定了, 那么整个数组就确定了,这样的一个数组结构除了能改变 某元素的值,其他的不能再改变。
5.2 数组的顺序表示和实现
数组类型特点: 1) 只有引用型操作,没有加工型操作; 2) 数组是多维的结构,而存储空间是一个一维的结构。 有两种顺序映象的方式。
有两种顺序映像方法: 1)以行序为主序(行优先,先行后列):先存储行号较小 的元素,行号相同者先存储列号较小的元素;
数据结构5树资料
3.树的术语:
结点(node)
数据元素。
结点的度(degree)
结点的子树个数。
树中所有结点度的最大值。 度不为0的结点。 度为0的结点。 某结点子树的根结点。
树的度(degree) 分支(branch)结点
叶(leaf)结点 孩子(child)结点
2018/10/13 第5章 树和二叉树
同构型
19/112
A
异构型
B
C
D
E
F
G
H
I
J
孩子表示法-- c语言描述 (同构型)
typedef struct TreeNode
{ DataType data;
struct TreeNdoe *Son[MAXSON];
} nodetype;
2018/10/13 第5章 树和二叉树 20/112
a b d i e j f c g h
2018/10/13
第5章 树和二叉树
2/112
除根以外的其它结点划分为m (m 0)个互不相交 的有限集合T0, T1, …, Tm-1,每个集合又是一棵树, 并且称之为根的子树(SubTree)。
每棵子树的根结点有且仅有一个直接前驱,但可 以有0个或多个直接后继。
B E F C G H D I J
E,F,B,G,C,H,I,J, D,A
第5章 树和二叉树 26/112
2018/10/13
3.层序遍历
按层次顺序(1,2,…)遍历,同一层按从左 到右的顺序。
A B E F C G H D I J
遍历序列: A,B,C,D,E,F,G,H,I,J
数据结构C++版第5章 树和二叉树 ppt课件
A
B
C
D
E
A
DEF G
GBF C
16
5.1 树的逻辑结构
树结构和线性结构的比较
线性结构
树结构
第一个数据元素
根结点(只有一个)
无前驱
无双亲
最后一个数据元素 无后继
叶子结点(可以有多个) 无孩子
其它数据元素
其它结点
一个前驱,一个后继
一对一
一个双亲,多个孩子
一对多
17
5.1 树的逻辑结构
树的遍历操作
树的遍历:从根结点出发,按照某种次序访问树中所有结点 ,使得每个结点被访问一次且仅被访问一次。 Nhomakorabea……
……
6
5.1 树的逻辑结构
树的基本术语
结点的度:结点所拥有的子树的个数。 树的度:树中各结点度的最大值。
A
BC
D
E F GH I J
KL
M
7
5.1 树的逻辑结构
树的基本术语
叶子结点:度为0的结点,也称为终端结点。 分支结点:度不为0的结点,也称为非终端结点。
A
BC
D
E F GH I J
KL
M
下标 data 0A
B
C
1B 2C
3D
DEF G H
第 5 章 树和二叉树
本章的主要内容是
➢树的逻辑结构 ➢树的存储结构 ➢二叉树的逻辑结构 ➢二叉树的存储结构及实现 ➢树、森林与二叉树的转换
1
5.1 树的逻辑结构
树的定义
树:n(n≥0)个结点的有限集合。 当n=0时,称为空树; 任意一棵非空树满足以下条件: ⑴ 有且仅有一个特定的称为根的结点; ⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互 不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树, 并称为这个根结点的子树。
数据结构 Chapter5
1
2
3
45 67
8 9 10
Department of Computer Science & Technology, Nanjing University
fall
DATA STRUCTURES
(4)若结点编号i为奇数,且i!=1,则它的左兄 弟为结点i-1。
(5)若结点编号i为偶数,且i!=n,则它的右兄 弟为结点i+1。
Tree ( ); ~Tree ( ); position Root ( ); BuildRoot ( const Type& value ); position FirstChild ( position p ); position NextSibling ( position p ); position Parent ( position p ); Type GetData ( position p );
DATA STRUCTURES
fall
5.2 二叉树 (Binary Tree) 二叉树的定义
DATA STRUCTURES
一棵二叉树是结点的一个有限集合,该 集合或者为空,或者是由一个根结点加 上两棵分别称为左子树和右子树的、互 不相交的二叉树组成。
Department of Computer Science & Technology, Nanjing University
fall
DATA STRUCTURES
定义1 满二叉树 (Full Binary Tree)
如果二叉树中所有分支结点的度数都为2, 且叶子结点都在同一层次上,则称这类二 叉树为满二叉树。
定义2 完全二叉树 (Complete Binary Tree)
吉林大学数据结构课件 第五章 图
3
V4
2
V3
7
无向图 端点 相邻的 度 连通图
有向图 弧 弧头 弧尾 邻接到 邻接自 出度 入度 强连通图,单连通图
图的存储结构
邻接矩阵 邻接表(逆邻接表) 十字链表 多重邻接表
邻接矩阵
用顺序方式或链接方式存储图的顶点表 v0,v1,…vn-1 ,图的边用n×n阶矩阵A =(aij)表示,A 的定义如下: (a) 若图为权图,aij对应边<vi,vj>的权值; (b) 若图为非权图,则 (1) aii=0; (2) aij=1,当i≠j且<vi,vj>或(vi,vj)存在时; (3)aij=0,当i≠j且<vi,vj>或(vi,vj)不存在时。 称矩阵A为图的邻接矩阵。
E(G),则称H是G的子图,G是H的母图。
如果 H 是 G 的子图,并且 V(H) = V(G) ,则
称H是G的支撑子图。
V1
V2 V2 V3 V5 V1 V3 V4 V5
V1 V1 V3 V2
V4
V2
V5
……
V1 V1 V1 V1 V2 V3 V4 V2 V2
V3
V4
V1
V3
V4
……
度
无向图中,顶点的度是以该顶点为端点的边的 个数。 有向图中,以某顶点为弧头的弧的数目称为该 顶点的入度。以某顶点为弧尾的弧的数目称为 该顶点的出度。该顶点的度=入度+出度。
深度优先搜索DFS ( Depth First Search )
深度优先搜索的示例
1 递归算法 算法DepthFirstSearch (v, visited)
/* 图的深度优先递归遍历算法*/
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
20
例如:一个有向网 其邻接矩阵 其邻接矩阵? 例如:一个有向网N,其邻接矩阵
v2 4 7 8 9 6 1 v5 v4 5
21
5 v1 2 v6
v3 5
图7.7
无向图数组表示法特点: 无向图数组表示法特点:
§ 5.2
图的存储结构
1)无向图邻接矩阵是对称矩阵,同一条边表示了两次; 2)顶点vi的度:等于二维数组i行(或列)中1的个数; 3)判断两顶点v、u是否为邻接点:只需判二维数组对应分量是否为1; 4)顶点不变,在图中增加、删除边:只需对二维数组对应分量赋值1或清0;
例
V0 V2 V3 V4 V1
下标 编号 link
0 1 2 3 4 m-1
V0 V1 V2 V3 V4
1 0 1
0
1
3 2 3 2 2
4 4
24
图的邻接表类型定义(p163) 图的邻接表类型定义(p163)
§ 5.2
图的存储结构
const MAX_VERTEX_NUM = 20; // 弧结点的结构 typedef struct ArcNode { // 该弧所指向的顶点的位置 int adjvex; // 指向下一条弧的指针 struct ArcNode *nextarc; // 与弧相关的权值,无权则为0 与弧相关的权值,无权则为0 VRType weight; // 指向该弧相关信息的指针 InfoType *info; } ; typedef struct VNode { VertexType data; ArcNode *firstarc; } AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; int vexnum, arcnum; GraphKind kind; } ALGraph; // 顶点结点的结构 // 顶点信息 // 指向第一条依附该顶点的弧
V0 V2 V3
V1
V4
0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0
V0
V1
V2
V3
0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0
23
§ 5.2
图的存储结构
二 邻接表 该结点表示边 邻接表是图的链式存储结构 Vj) 其中的1 (Vi Vj),其中的1是Vj 1 无向图的邻接表 在一维数组中的位置 顶点:通常按编号顺序将顶点数据存储在一维数组中; 顶点:通常按编号顺序将顶点数据存储在一维数组中; 关联同一顶点的边: 关联同 V4
14
连通图 G1
四
图的基本操作
P156
15
第五 章
5.2 一 二 三 四
图
图的存储结构 邻接矩阵 邻接表 十字链表 邻接多重表
16
§ 5.2
图的存储结构
V0 V2 V3
V1
V0
V1
V4
V2
V3
图的存储结构至少要保存两类信息: 图的存储结构至少要保存两类信息: 1)顶点的数据 1)顶点的数据 2)顶点间的关系 2)顶点间的关系
V1
V0
V1
非 强 连 通 图
10
5
子图 设有两个图G=(V,E)、G1=(V1,E1),若V1⊆ E1关联的顶点都在V1中,则称 G1是G的子图; V,E1 ⊆ E,
例 (b)、(c) 是 (a) 的子图 、 V0 V2 V3 V4 V3 V1 V0 V2 V4 V3 (c)
11
V1
V0 V2
V1
1
第五章
图
5.1 图的基本概念 5.2 图的存储结构 5.3 图的遍历 5.4 连通图与生成树 5.5 有向无环图及应用 5.6 最短路径
2
第五 章 5.1 一 二 三 四
图
图的概念 图的概念 图的应用 图的基本术语 图的基本操作
3
§5.1 图的基本概念
一 图的概念 图的定义: 图G由两个集合V,E构成,记作G=<V,E> 其中V是顶点的非空有限集合,E是边的有限集合(边是顶点的无序 对或有序对集合)。
例
在图1中,V0,V1,V2,V3 是V0到V3的路径; V0,V1,V2,V3,V0是回 路;在图2中,V0,V2,V3 是V0到V3的路径; V0,V2,V3,V0是回 路; V0 V1 V0 V1 有向图 V2
无向图
V3
V4
V2
V3
8
3 简单路径和简单回路 在一条路径中,若除起点和终点外,所有顶点各不相同,则称 该路径为简单路径; 由简单路径组成的回路称为简单回路;
例
G1=<V1,E1> V1={v0 v1,v2,v3} E1={<v0,v1 > , <v0,v2 >, <v2,v3 >,<v3,v0 >} 有序对<vi,vj> : 用以vi为起点、vj为终点 的有向线段表示,称为有向 边或弧;
V0
V1
V2
V3 G1 图示
4
§5.1 图的基本概念
G2=<V2,E2> V2={v0 ,v1,v2,v3,v4 } E2={(v0,v1),(v0,v3),(v1,v2),(v1,v4),(v2,v3)(v2,v4)} V0 V1 V2 V3 V4 G2图示 G2图示 无向图:在图G中,若所有边是无向边,则称G为无向图; 有向图:在图G中,若所有边是有向边,则称G为有向图;
1 A i, j] = [ 0
若<vi, vj>或(vi, vj)∈ E 或 ∈ 反之
18
在数组表示法中, 一 数组表示法(邻接矩阵表示)
§ 5.2
图的存储结构
用邻接矩阵表示顶点间的关系
邻接矩阵:G的邻接矩阵是满足如下条件的n阶矩阵: 1 若(vi,vi+1)∈E 或 <vi,vi+1>∈E V0 A[i,j]= 0 否则 V0 V2 V3 V4 V1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 V2
如何表示顶点间的关系?
约定: 约定:
E>是图 是图, },设顶点的 G=<V, E>是图, V={v0,v1,v2, … vn-1 },设顶点的 数据为它的编号
17
一、 邻接矩阵
图的邻接矩阵表示法( 图的邻接矩阵表示法(Adjacency Matrix)也称作数组表示 ) 法。采用两个数组来表示图: 采用两个数组来表示图: 一个是用于存储顶点信息的一维数组; 一个是用于存储顶点信息的一维数组 ; 另一个用于存储图 中顶点之间关联关系的二维数组----邻接矩阵。 中顶点之间关联关系的二维数组 邻接矩阵。 邻接矩阵 若图G是一个具有 个顶点的无权图 的邻接矩阵是n× 若图 是一个具有n个顶点的无权图,G的邻接矩阵是 ×n 是一个具有 个顶点的无权图, 的邻接矩阵是 矩阵A: 矩阵 :
图的所有顶点的度数和 = 2*e (每条边对图的所有顶点的度数和“贡献”2度)
7
e
§5.1 图的基本概念
路径、 3 路径、回路 无向图G=(V,E)中的顶点序列v1,v2,… ,vk,若(vi,vi+1)∈E 无向图 ( i=1,2,…k-1), v =v1, u =vk, 则称该序列是从顶点v到顶点u的 路径;若v=u,则称该序列为回路; 有向图D=(V,E)中的顶点序列v1,v2,… ,vk, 若<vi,vi+1>∈E 有向图 (i=1,2,…k-1), v =v1, u =vk, 则称该序列是从顶点v到顶点u 的路径;若v=u,则称该序列为回路;
12
有向图D 有向图 的极大强连通子图称为D 的强连通分量 极大强连通子图意思是:该子图是D强连通子图,将D的任何不 在该子图中的顶点加入,子图不再是强连通的; 强连通分量 V0 V1 V0 V1 V3
V2
V3
V2
13
7 生成树 包含无向图G 所有顶点的的极小连通子图称为G 的生成树 极小连通子图意思是:该子图是G 的连通子图,在该子 图中删除任何一条边,子图不再连通, 若T是G 的生成树当且仅当T 满足如下条件 T是G 的连通子图 T包含G 的所有顶点 T中无回路 V0 V2 V3 V4 V3 V1 V0 V2 V4 G1的生成树 G1的生成树 V1 V3 V2
§7.1 图的基本概念
三 图的基本术语 V0 V1 1 邻接顶点及关联边 邻接顶点:边e= (v, u),则称顶点v、u相邻接 V2 关联边:边e= (v, u), 则称边e关连顶点v、u V3 V4 2 顶点的度、入度、出度 顶点V的度 = 与V相关联的边的数目 在有向图中: V0 V1 顶点V的出度=以V为起点的有向边数 顶点V的入度=以V为终点的有向边数 顶点V的度= V的出度+V的入度 V3 V2 设图G的顶点数为n,边数为e e
V1
V3
0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0
19
若图G是一个有 个顶点的网 若图 是一个有n个顶点的网,则它的邻接矩阵是具有 是一个有 个顶点的网, 如下性质的n× 矩阵 矩阵A: 如下性质的 ×n矩阵 :
wij A[i, j] = ∞
若<vi, vj>或(vi, vj)∈E 或 ∈ 反之
V0 V2 V3
V1
V4
0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0
数组表示法的空间代价 数组表示法的空间代价 只与图的顶点数有关
22
图的基本操作: 图的基本操作:
§ 5.2
图的存储结构
1)求无向图某顶点vi的度(或有向图中vi的出度)。A[I,0]到 A[I,n-1]中的非0个数,即数组A中第i 行的非0 元素的个数; 2)求有向图某顶点vi 的 入度。 A[0,i]到A [n-1,i] 中的非0个数,即数组A中 第i 列的非0 元素的个数; 3)检测图中的总边数。扫描整个数组A,统计出数组中非0元素的个数。无向图 的总边数为非0元素个数的一半,而有向图的总弧数为非0元素个数;