数据结构第五章图习题教学文案
《数据结构》课程教案

《数据结构》课程教案一、引言数据结构是计算机科学中非常重要的一门课程,它涉及到对数据的组织、存储和访问方法的研究。
数据结构的学习能够帮助学生建立起对计算机中数据处理的基本概念和方法的理解,并培养学生分析和解决实际问题的能力。
本教案旨在为《数据结构》课程提供一套系统的教学计划,以确保学生能够全面掌握该学科的知识和技能。
二、教学目标本课程的主要教学目标如下:1. 掌握常见的数据结构,包括线性表、栈、队列、树、图等,并理解它们的基本概念与特点;2. 理解各种数据结构之间的联系与区别,能够根据问题需求选择合适的数据结构;3. 学习并掌握常用的数据结构算法,如查找、排序等;4. 培养学生分析和解决实际问题的能力,提高编程实践的能力;5. 增强学生的团队合作与沟通能力,通过小组项目实践提升学生能力。
三、教学内容与安排本课程的教学内容将按照以下顺序进行讲解和实践操作:第一章:绪论1. 数据结构的基本概念与作用;2. 学习数据结构的意义与价值;3. 课程的教学方法和学习要求。
第二章:线性表1. 线性表的定义与分类;2. 线性表的顺序存储结构与链式存储结构;3. 线性表的基本运算和实例分析。
第三章:栈与队列1. 栈的定义与基本操作;2. 栈的应用场景与实例分析;3. 队列的定义与基本操作;4. 队列的应用场景与实例分析。
第四章:树与二叉树1. 树的定义与基本术语;2. 二叉树的定义与性质;3. 二叉树的遍历方法与实例分析;4. 哈夫曼树的构建与应用。
第五章:图1. 图的定义与基本术语;2. 图的存储方式与基本操作;3. 图的遍历算法与实例分析;4. 最短路径算法与实例分析。
第六章:查找算法1. 顺序查找与二分查找;2. 哈希查找的原理与实现方法。
第七章:排序算法1. 冒泡排序与插入排序;2. 快速排序与归并排序;3. 堆排序与希尔排序。
第八章:课程总结与展望1. 对整个课程内容的回顾;2. 对数据结构的进一步学习与应用的展望;3. 学生反馈与教师建议。
数据结构课件第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
07《数据结构》第五章

3
本章课程内容(第五章 数组和广义表)
5.1 数组的类型定义 5.2 数组的顺序表示和实现
5.3 矩阵的压缩存储
矩阵的压缩存储
若i≥j,则aij在下三角形中。 aij之前的i行(从第0行到第i-1行) 一共有1+2+…+i=i(i+1)/2个元素,在第i行上, aij之前恰有j个元 素(即ai0,ai1,ai2,…,aij-1),因此有:
k=i×(i+1)/2+j
0≦k<n(n+1)/2
若i<j,则aij是在上三角矩阵中。因为aij=aji,所以只要交换上述 对应关系式中的i和j即可得到:
数组的类型定义
基本操作: InitArray (&A, n, bound1, ..., boundn) 操作结果:若维数 n 和各维长度合法,则构造相应的数组 A。 DestroyArray (&A) 初始条件:数组 A 已经存在。
操作结果:销毁数组 A。
Value (A, &e, index1, ..., indexn) 初始条件:A 是 n 维数组,e 为元素变量,随后是 n 个下标值。 操作结果:若各下标不超界,则e赋值为所指定的A的元素值,并返 回OK。 Assign (&A, e, index1, ..., indexn) 初始条件:A 是 n 维数组,e 为元素变量,随后是 n 个下标值。
………………..
an-1 0 a n-1 1 a n-1 2 …a n-1 n-1
数据结构第5章图1

无向图的邻接矩阵是对称阵。
11/7/2019
《数据结构》国家精品课程
35
[例2]有向图的邻接矩阵
01234
V0
V1
0 01000
V2
1 10001 2 01010
V4
V3
3 10000 4 00010
11/7/2019
《数据结构》国家精品课程
36
[例3]权图的邻接矩阵
3
V0
V1
5
84
V2 2 V3
《数据结构》国家精品课程
32
1、 图的存储结构
邻接矩阵 邻接表(逆邻接表)
11/7/2019
《数据结构》国家精品课程
33
1、邻接矩阵
用顺序方式或链接方式存储图的顶点表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为图的邻接矩阵。
11/7/2019
《数据结构》国家精品课程
34
[例1]无向图的邻接矩阵
V0
V1
V2
V3
0123
0 0111 1 1001 2 1001 3 1110
11/7/2019
《数据结构》国家精品课程
38
V1
V2
V3
V4
Graph1
V1
V2
V3
V4
V5
Graph2
《数据结构》吕云翔编著第5章树习题解答

第五章树课后习题讲解一、选择题⑴如果结点A有3个兄弟,B是A的双亲,则结点B的度是()。
A 1B 2C 3D 4【解答】D⑵设二叉树有n个结点,则其深度为()。
A n-1B nC +1D 不能确定【解答】D【分析】此题并没有指明是完全二叉树,则其深度最多是n,最少是 +1。
⑶二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。
A 空或只有一个结点B 高度等于其结点数C 任一结点无左孩子D 任一结点无右孩子【解答】B【分析】此题注意是序列正好相反,则左斜树和右斜树均满足条件。
⑷线索二叉树中某结点R没有左孩子的充要条件是()。
A R.lchild=NULLB R.ltag=0C R.ltag=1D R.rchild=NULL【解答】C【分析】线索二叉树中某结点是否有左孩子,不能通过左指针域是否为空来判断,而要判断左标志是否为1。
⑸深度为k的完全二叉树至少有()个结点,至多有()个结点,具有n个结点的完全二叉树按层序从1开始编号,则编号最小的叶子的序号是()。
A 2k-2+1B 2k-1C 2k -1 -1D 2k-1E 2k+1F 2k+1 -1G 2k -1+1H 2k【解答】B,C,A【分析】深度为k的完全二叉树最少结点数的情况应是第k层上只有1个结点,最多的情况是满二叉树,编号最小的叶子应该是在结点数最少的情况下,叶子结点的编号。
⑹一个高度为h的满二叉树共有n个结点,其中有m个叶子结点,则有()成立。
A n=h+mB h+m=2nC m=h-1D n=2m-1【解答】D【分析】满二叉树中没有度为1的结点,所以有m个叶子结点,则度为2的结点个数为m-1。
⑺任何一棵二叉树的叶子结点在前序、中序、后序遍历序列中的相对次序()。
A 肯定不发生改变B 肯定发生改变C 不能确定D 有时发生变化【解答】A【分析】三种遍历次序均是先左子树后右子树。
⑻如果T' 是由有序树T转换而来的二叉树,那么T中结点的前序序列就是T' 中结点的()序列,T中结点的后序序列就是 T' 中结点的()序列。
数据结构课后习题答案第五章数组与广义表

第五章数组与广义表一、假设有二维数组A6*8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000。
计算:1、数组A的体积(即存储量);2、数组A的最后一个元素a57的第一个字节的地址;3、按行存储时,元素a14的第一个字节的地址;4、按列存储时,元素a47的第一个字节的地址;答案:1、(6*8)*6=2882、loc(a57)=1000+(5*8+7)*6=1282或=1000+(288-6)=12823、loc(a14)=1000+(1*8+4)*6=10724、loc(a47)=1000+(7*6+4)*6=1276二、假设按低下标(行优先)优先存储整数数组A9*3*5*8时第一个元素的字节地址是100,每个整数占四个字节。
问下列元素的存储地址是什么?(1)a0000(2)a1111(3)a3125 (4)a8247答案:(1)100(2)loc(a1111)=100+(1*3*5*8+1*5*8+1*8+1)*4=776(3) loc(a3125)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784(4) loc(a8247)=100+(8*3*5*8+2*5*8+4*8+7)*4=4416五、设有一个上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B[m]中,(m 充分大),使得B[k]=aij且k=f1(i)+f2(j)+c。
试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)。
答:K=n+(n-1)+(n-2)+…..+(n-(i-1)+1)+j-i=(i-1)(n+(n-i+2))/2+j-i所以f1(i)=(n+1/2)i-1/2i2f2(j)=jc=-(n+1)九、已知A为稀疏矩阵,试从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成∑aii运算的优缺点。
(对角线求和)解:1、二维数组For(i=1;i<=n;i++)S=s+a[i][i];时间复杂度:O(n)2、for(i=1;i<=m.tu;i++)If(a.data[k].i==a.data[k].j) s=s+a.data[k].value;时间复杂度:O(n2)二十一、当稀疏矩阵A和B均以三元组表作为存储结构时,试写出矩阵相加的算法,其结果存放在三元组表C中。
数据结构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,其中每个集合又是一棵树, 并称为这个根结点的子树。
数据结构课后习题及解析第五章

第五章习题5.1 假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址。
已知A的基地址为1000,计算:数组A共占用多少字节;数组A的最后一个元素的地址;按行存储时元素A36的地址;按列存储时元素A36的地址;5.2 设有三对角矩阵An×n ,将其三条对角线上的元素逐行地存于数组B(1:3n-2)中,使得B[k]= aij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i,j的下标变换公式。
5.3假设稀疏矩阵A和B均以三元组表作为存储结构。
试写出矩阵相加的算法,另设三元组表C存放结果矩阵。
5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。
5.5写一个在十字链表中删除非零元素aij的算法。
5.6画出下面广义表的两种存储结构图示:((((a), b)), ((( ), d), (e, f)))5.7求下列广义表运算的结果:(1)HEAD[((a,b),(c,d))];(2)TAIL[((a,b),(c,d))];(3)TAIL[HEAD[((a,b),(c,d))]];(4)HEAD[TAIL[HEAD[((a,b),(c,d))]]];(5)TAIL[HEAD[TAIL[((a,b),(c,d))]]];实习题若矩阵Am×n 中的某个元素aij是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。
假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。
第五章答案5.2设有三对角矩阵A n×n,将其三条对角线上的元素逐行的存于数组B[1..3n-2]中,使得B[k]=a ij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i、j的下标变换公式。
【解答】(1)k=2(i-1)+j(2) i=[k/3]+1, j=[k/3]+k%3 ([ ]取整,%取余)5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。
数据结构第五章习题课

1、特殊矩阵和稀疏矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:后者在采用压缩存储后将会失去随机存储的功能。
因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号作为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。
2、二维数组M的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5,M按行存储时元素M[3][5]的起始地址与M按列存储时元素()的起始地址相同。
A、M[2][4]B、M[3][4]C、M[3][5]D、M[4][4]为第3、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11的地址为()。
一元素,其存储地址为1,每个元素占一个地址空间,则a85A. 13B. 33C. 18D. 404、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线(i<j)上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij的位置k的关系为( )。
A. i*(i-1)/2+jB. j*(j-1)/2+iC. i*(i+1)/2+jD. j*(j+1)/2+i5、设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序(1≤i,j≤n,且i≤j)存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij在B中的位置为( )。
A. i(i-l)/2+jB. j(j-l)/2+iC. j(j-l)/2+i-1D. i(i-l)/2+j-16、设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。
A.(i-1)*n+jB.(i-1)*n+j-1C. i*(j-1)D. j*m+i-17、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
05 图【单选题】1. 设无向图G 中有五个顶点,各顶点的度分别为2、4、3、1、2,则G 中边数为(C )。
A、4条 B、5条 C、6条 D、无法确定2. 含n 个顶点的无向完全图有(D )条边;含n 个顶点的有向图最多有(C )条弧;含n 个顶点的有向强连通图最多有(C )条弧;含n 个顶点的有向强连通图最少有(F)条弧;设无向图中有n 个顶点,则要接通全部顶点至少需(G )条边。
A 、n 2B 、n(n+1)C 、n(n-1)D 、n(n-1)/2E 、n+1F 、nG 、n-13. 对下图从顶点a 出发进行深度优先遍历,则(A )是可能得到的遍历序列。
A 、acfgdebB 、abcdefgC 、acdgbefD 、abefgcd对下图从顶点a 出发进行广度优先遍历,则(D )是不可能得到的遍历序列。
A 、abcdefgB 、acdbfgeC 、abdcegfD 、adcbgef4. 设图G 的邻接矩阵A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡010101010,则G 中共有(C )个顶点;若G 为有向图,则G 中共有(D )条弧;若G 为无向图,则G 中共有(B )条边。
A 、1B 、2C 、3D 、4E 、5F 、9G 、以上答案都不对5. 含n 个顶点的图,最少有(B )个连通分量,最多有(D )个连通分量。
A 、0B 、1C 、n-1D 、n6. 用邻接表存储图所用的空间大小(A )。
A 、与图的顶点数和边数都有关B 、只与图的边数有关C 、只与图的顶点数有关D 、与边数的平方有关7. n 个顶点的无向图的邻接表最多有(B )个表结点。
A 、n 2B 、n(n-1)C 、n(n+1)D 、n(n-1)/28. 无向图G=(V ,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是(D )。
A 、a,b,e,c,d,fB 、a,c,f,e,b,dC 、a,e,b,c,f,dD 、a,e,d,f,c,b9. 图的BFS 生成树的树高比DFS 生成树的树高(A )。
A 、小或相等B 、小C 、大或相等D 、大10. 下列不正确的是(C)。
(1)求从指定源点到其余各顶点的迪杰斯特拉(Dijkstra)最短路径算法中弧上权不能为负的原因是在实际应用中无意义;(2)利用Dijkstra求每一对不同顶点之间的最短路径的算法时间是O(n3);(图用邻接矩阵表示)(3)Floyd求每对不同顶点对的算法中允许弧上的权为负,但不能有权和为负的回路。
A、(1),(2),(3)B、(1)C、(1),(3)D、(2),(3)11. 当各边上的权值(A)时,BFS算法可用来解决单源最短路径问题。
A、均相等B、均互不相等C、不一定相等12. 若一个有向图具有拓扑排序序列,那么它的邻接矩阵必定为(C)。
A、对称矩阵B、稀疏矩阵C、三角矩阵D、一般矩阵13. 在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是(D)。
A、G中有弧<Vi,Vj>B、G中有一条从Vi到Vj的路径C、G中没有弧<Vi,Vj>D、G中有一条从Vj到Vi的路径14. 关键路径是AOE网中(B)。
A、从始点到终点的最短路径B、从始点到终点的最长路径C、人始点到终点的边数最多的路径D、从始点到终点的边数最少的路径15. 下面关于求关键路径的说法不正确的是(C)。
A、求关键路径是以拓扑排序为基础的B、一个事件的最早开始时间同以该事件为尾的弧的活动最早开始时间相同C、一个事件的最迟开始时间为以该事件为尾的弧的活动最迟开始时间与该活动的持续时间的差D、关键活动一定位于关键路径上【填空题】1. 设无向连通图G含n个顶点e条边,则G的生成树含个顶点条边。
2. 连通分量是无向图的子图,生成树是无向连通图的子图。
3. 对稀疏图而言,在邻接矩阵和邻接表这两种存储结构中选择更为适宜。
4. 设无向图G含n个顶点e条边,则G的邻接表表示中含个边表结点。
5. 设有向图G含n个顶点e条弧,则G的邻接表表示中含个边表结点。
【计算题】1. 设无向图如下,写出对该图从顶点a 出发进行广度优先遍历可能得到的所有遍历序列。
解:abcdefg 、abdcegf 、acbdfeg 、acdbfge 、adbcgef 、adcbgfe 。
2. 设有向图如下,写出对该图从顶点a 出发进行深度优先遍历可能得到的所有遍历序列。
解:abedc 、acbed 、acdbe 。
3. 设无向网如下,(1)写出其邻接矩阵;(2)基于该邻接矩阵求深度优先生成树和广度优先生成树;(3)基于该邻接矩阵按普里姆算法求最小生成树;(4)写出其邻接表;(5)基于该邻接表按克鲁斯卡尔算法求最小生成树。
解:(1) ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞6456252363794567555553955434 (2)深度优先生成树:;广度优先生成树:(3)最小生成树:;求解过程:(4)邻接表:(5)最小生成树:4. 设AOV图如下,写出对该图进行拓扑排序可能得到的所有拓扑序列。
解:abcdefg、abcdfeg、abcfdeg5. 设AOE网如下,试求关键路径。
解:关键路径1:v1→v2→v5→v7关键路径2:v1→v3→v6→v7。
6. 设有向网如下,试用迪杰斯特拉算法求从顶点A出发到其余各顶点的最短路径。
解:ab:3af:5afe:7abc:11afed:147. 设有向网如下,试用弗洛伊德算法求图中各对顶点间的最短路径。
解:【算法题】下列算法题中可能用到的类如下:public class MGraph{private Object vexs[];private int adj[][];private int vexnum;private int arcnum;public MGraph(int maxvn){int i, j;vexs=new Object[maxvn];adj=new int[maxvn][maxvn];for(i=0;i<maxvn;i++)for(j=0;j<maxvn;j++)adj[i][j]=0;vexnum=0;arcnum=0;}//构造函数}//图的邻接矩阵存储结构类public class ALANode{public int adj;public ALANode next;}//图的邻接表存储结构中的表结点类public class ALVNode{public Object data; //顶点信息public ALANode firstarc;}//图的邻接表存储结构中的头结点类public class ALGraph{private ALVNode vexs[];private int vexnum;private int arcnum;public ALGraph(int maxvn){vexs=new ALVNode[maxvn];vexnum=0;arcnum=0;}//构造函数}//图的邻接表存储结构类1. 在ALGraph类中添加符合如下要求的构造函数⑴public ALGraph(Object[ ] v, ArcArray [ ] a)其中v为顶点向量,a为弧向量,类ArcArray的定义如下:public class ArcArray{private int index1; //弧尾顶点下标private int index2; //弧头顶点下标}(2)public ALGraph(MGraph g)2. 在ALGraph类中添加实现如下功能的方法:(1)在无向图中插入一个顶点;(2)在无向图中删除一个顶点;(3)在无向图中添加一条边;(4)在无向图中删除一条边。
(5)判定无向图中是否存在从顶点v i到顶点v j的路径(i≠j)。
(6)输出无向图中从顶点v i到顶点v j的所有简单路径。
解:(5)public boolean path(int i, int j){//从顶点v i出发进行深度优先遍历,调用完成时所有与v i有路径相通的顶点都被访问到boolean visited[ ]=new boolean[vexs.length];for(k=0;k<vexnum;k++) visited[k]=false;dfs(i, visited);return visited[j];}//pathvoid dfs(int i, boolean[ ] visited){//从顶点v i出发对图G进行深度优先遍历visited[i]=true;for(p=vexs[i].firstarc;p;p=p.next)if (!visited[p.adj]) dfs(p.adj, visited);}//dfs3. 在MGraph类中添加符合如下要求的构造函数:(1)public class MGraph(Object[ ] v, EdgeArray [ ] e)其中v为顶点向量,e为边向量,类EdgeArray的定义如下:public class EdgeArray{public int index1; //顶点1下标public int index2; //顶点2下标}(2)public MGraph(ALGraph g)4. 在MGraph类中添加实现如下功能的方法:(1)在有向图中插入一个顶点;(2)在有向图中删除一个顶点;(3)在有向图中添加一条边;(4)在有向图中删除一条边。
(5)判定有向图中从顶点v i到顶点v j是否存在一条长为k的简单路径。