数据结构作业系统-第七章答案教学文稿
《数据结构》吕云翔编著第7章排序习题解答

第七章排序课后习题解答一、单项选择题1.下列内部排序算法中:A.快速排序 B.直接插入排序C. 二路归并排序D. 简单选择排序E. 起泡排序F. 堆排序(1)其比较次数与序列初态无关的算法是()(2)不稳定的排序算法是()(3)在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k<<n)的情况下,排序效率最高的算法是()(4)排序的平均时间复杂度为O(n•logn)的算法是()为O(n•n)的算法是()【解答】(1) DC (2)ADF (3)B (4)ACF BDE2.比较次数与排序的初始状态无关的排序方法是( )。
A.直接插入排序 B.起泡排序 C.快速排序 D.简单选择排序【解答】D3.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1) 84 47 25 15 21 (2) 15 47 25 84 21(3) 15 21 25 84 47 (4) 15 21 25 47 84则采用的排序是 ( )。
A. 选择B. 冒泡C. 快速D. 插入【解答】A4.下列排序算法中( )排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A. 选择B. 冒泡C. 归并D. 堆【解答】C5.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。
A.(38,40,46,56,79,84) B. (40,38,46,79,56,84)C.(40,38,46,56,79,84) D. (40,38,46,84,56,79)【解答】C6.下列排序算法中,在待排序数据已有序时,花费时间反而最多的是( )排序。
A.冒泡 B. 希尔 C. 快速 D. 堆【解答】C7. 就平均性能而言,目前最好的内排序方法是( )排序法。
A. 冒泡B. 希尔插入C. 交换D. 快速【解答】 D8. 下列排序算法中,占用辅助空间最多的是:( )A. 归并排序B. 快速排序C. 希尔排序D. 堆排序【解答】 A9. 若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行()次比较。
中国铁道出版社数据结构(第二版)单元7练习参考答案

中国铁道出版社数据结构(第二版)单元7练习参考答案单元练习7一.判断题(下列各题,正确的请在前面的括号内打√;错误的打�w )(√)(1)树结构中每个结点最多只有一个直接前驱。
(ㄨ)(2)完全二叉树一定是满二查树。
(ㄨ)(3)在中序线索二叉树中,右线索若不为空,则一定指向其双亲。
(√)(4)一棵二叉树中序遍历序列的最后一个结点,必定是该二叉树前序遍历的最后一个结点。
(√)(5)二叉树的前序遍历中,任意一个结点均处于其子女结点的前面。
(√)(6)由二叉树的前序遍历序列和中序遍历序列,可以推导出后序遍历的序列。
(√)(7)在完全二叉树中,若一个结点没有左孩子,则它必然是叶子结点。
(ㄨ)(8)在哈夫曼编码中,当两个字符出现的频率相同,其编码也相同,对于这种情况应该做特殊处理。
(ㄨ)(9)含多于两棵树的森林转换的二叉树,其根结点一定无右孩子。
(√)(10)具有n个叶子结点的哈夫曼树共有2n-1个结点。
二.填空题(1)在树中,一个结点所拥有的子树数称为该结点的度。
(2)度为零的结点称为叶(或叶子,或终端)结点。
(3)树中结点的最大层次称为树的深度(或高度)。
(4)对于二叉树来说,第i层上至多有 2i-1 个结点。
(5)深度为h的二叉树至多有 2h-1 个结点。
(6)由一棵二叉树的前序序列和中序序列可唯一确定这棵二叉树。
(7)有20个结点的完全二叉树,编号为10的结点的父结点的编号是 5 。
(8)哈夫曼树是带权路径长度最小的二叉树。
(9)由二叉树的后序和中序遍历序列,可以唯一确定一棵二叉树。
(10)某二叉树的中序遍历序列为: DEBAC,后序遍历序列为:EBCAD。
则前序遍历序列为:DABEC 。
(11)设一棵二叉树结点的先序遍历序历为:ABDECFGH,中序遍历序历为:DEBAFCHG,则二叉树中叶结点是: E、F、H 。
(12)已知完全二叉树的第8层有8个结点,则其叶结点数是 68 。
(13)由树转换成二叉树时,其根结点无右子树。
数据结构(C++版)课后答案 (王红梅)第7章 查找技术

第 7 章查找技术课后习题讲解1. 填空题⑴顺序查找技术适合于存储结构为()的线性表,而折半查找技术适用于存储结构为()的线性表,并且表中的元素必须是()。
【解答】顺序存储和链接存储,顺序存储,按关键码有序⑵设有一个已按各元素值排好序的线性表,长度为125,用折半查找与给定值相等的元素,若查找成功,则至少需要比较()次,至多需比较()次。
【解答】1,7【分析】在折半查找判定树中,查找成功的情况下,和根结点的比较次数最少,为1次,最多不超过判定树的深度。
⑶对于数列{25,30,8,5,1,27,24,10,20,21,9,28,7,13,15},假定每个结点的查找概率相同,若用顺序存储结构组织该数列,则查找一个数的平均比较次数为()。
若按二叉排序树组织该数列,则查找一个数的平均比较次数为()。
【解答】8,59/15【分析】根据数列将二叉排序树画出,将二叉排序树中查找每个结点的比较次数之和除以数列中的元素个数,即为二叉排序树的平均查找长度。
⑷长度为20的有序表采用折半查找,共有()个元素的查找长度为3。
【解答】4【分析】在折半查找判定树中,第3层共有4个结点。
⑸假定一个数列{25,43,62,31,48,56},采用的散列函数为H(k)=k mod 7,则元素48的同义词是()。
【解答】62【分析】H(48)= H(62)=6⑹在散列技术中,处理冲突的两种主要方法是()和()。
【解答】开放定址法,拉链法⑺在各种查找方法中,平均查找长度与结点个数无关的查找方法是()。
【解答】散列查找【分析】散列表的平均查找长度是装填因子的函数,而不是记录个数n的函数。
⑻与其他方法相比,散列查找法的特点是()。
【解答】通过关键码计算记录的存储地址,并进行一定的比较2. 选择题⑴静态查找与动态查找的根本区别在于()。
A 它们的逻辑结构不一样B 施加在其上的操作不同C 所包含的数据元素的类型不一样D 存储实现不一样【解答】B【分析】静态查找不涉及插入和删除操作,而动态查找涉及插入和删除操作。
【免费下载】数据结构第7章 答案

A)n-1 B)n(n-1)/2 C)n(n+1)/2 D)n A33、一个n 个顶点的连通无向图,其边的个数至少为___。
A)n-1 B)n C)n+1 D)nlogn B34、要连通具有n 个顶点的有向图,至少需要___条边。
A)n-l B)n C)n+l D)2n B35、在一个无向图中,所有顶点的度数之和等于所有边数___倍。
A)5 B)6 C)7 D)8 C05、有 8 个结点的有向完全图有 条边。
A)14 B)28 C)56 D)112 B06、用邻接表表示图进行广度优先遍历时,通常是采用 来实现算法的。
A)栈 B)队列 C)树 D)图 A07、用邻接表表示图进行深度优先遍历时,通常是采用 来实现算法的。
A)栈 B)队列 C)树 D)图 A08、一个含 n 个顶点和 e 条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时 间复杂度为 。
A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3 A12、已知图的邻接表如下所示,根据算法,则从顶点 0 出发按广度优先遍历的结点序列是 。
A)0 3 2 1 B)0 1 2 3 C)0 1 3 2 D)0 3 1 2 A13、图的深度优先遍历类似于二叉树的 。
A)先序遍历 B)中序遍历 C)后序遍历 D)层次遍历 D14、图的广度优先遍历类似于二叉树的 。
A)关键路径 B)最短路径的 Dijkstra C)拓扑排序 D)广度优先遍历 A18、若用邻接矩阵表示一个有向图,则其中每一列包含的“1”的个数为 。
数据结构---C语言描述-(耿国华)-高等教育出版社出版-课后习题答案

第一章习题答案2、××√3、(1)包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3)数据对象、对象间的关系、一组处理数据的操作(4)指针类型(5)集合结构、线性结构、树形结构、图状结构(6)顺序存储、非顺序存储(7)一对一、一对多、多对多(8)一系列的操作(9)有限性、输入、可行性4、(1)A(2)C(3)C5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)第二章习题答案1、(1)一半,插入、删除的位置(2)顺序和链式,显示,隐式(3)一定,不一定(4)头指针,头结点的指针域,其前驱的指针域2、(1)A(2)A:E、AB:H、L、I、E、AC:F、MD:L、J、A、G或J、A、G(3)D(4)D(5)C(6)A、C3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。
头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。
首元素结点:线性表中的第一个结点成为首元素结点。
4、算法如下:int Linser(SeqList *L,int X){ int i=0,k;if(L->last>=MAXSIZE-1){ printf(“表已满无法插入”);return(0);}while(i<=L->last&&L->elem[i]<X)i++;for(k=L->last;k>=I;k--)L->elem[k+1]=L->elem[k];L->elem[i]=X;L->last++;return(1);}5、算法如下:#define OK 1#define ERROR 0Int LDel(Seqlist *L,int i,int k){ int j;if(i<1||(i+k)>(L->last+2)){ printf(“输入的i,k值不合法”);return ERROR;}if((i+k)==(L->last+2)){ L->last=i-2;ruturn OK;}else{for(j=i+k-1;j<=L->last;j++)elem[j-k]=elem[j];L->last=L->last-k;return OK;}}6、算法如下:#define OK 1#define ERROR 0Int Delet(LInkList L,int mink,int maxk){ Node *p,*q;p=L;while(p->next!=NULL)p=p->next;if(mink<maxk||(L->next->data>=mink)||(p->data<=maxk)){ printf(“参数不合法”);return ERROR;}else{ p=L;while(p->next-data<=mink)p=p->next;while(q->data<maxk){ p->next=q->next;free(q);q=p->next;}return OK;}}9、算法如下:int Dele(Node *S){ Node *p;P=s->next;If(p= =s){printf(“只有一个结点,不删除”);return 0;}else{if((p->next= =s){s->next=s;free(p);return 1;}Else{ while(p->next->next!=s)P=p->next;P->next=s;Free(p); return 1;}}}第三章习题答案2、(1)3、栈有顺序栈和链栈两种存储结构。
数据结构第七章参考答案

习题71.填空题(1)由10000个结点构成的二叉排序树,在等概率查找的条件下,查找成功时的平均查找长度的最大值可能达到(___________)。
答案:5000.5(2)长度为11的有序序列:1,12,13,24,35,36,47,58,59,69,71进行等概率查找,如果采用顺序查找,则平均查找长度为(___________),如果采用二分查找,则平均查找长度为(___________),如果采用哈希查找,哈希表长为15,哈希函数为H(key)=key%13,采用线性探测解决地址冲突,即d i=(H(key)+i)%15,则平均查找长度为(保留1位小数)(___________)。
答案:6,3,1.6(3)在折半查找中,查找终止的条件为(___________)。
答案:找到匹配元素或者low>high?(4)某索引顺序表共有元素275个,平均分成5块。
若先对索引表采用顺序查找,再对块元素进行顺序查找,则等概率情况下,分块查找成功的平均查找长度是(___________)。
答案:31(5)高度为8的平衡二叉树的结点数至少是(___________)。
答案: 54 计算公式:F(n)=F(n-1)+F(n-2)+1(6)对于这个序列{25,43,62,31,48,56},采用的散列函数为H(k)=k%7,则元素48的同义词是(___________)。
答案:62(7)在各种查找方法中,平均查找长度与结点个数无关的查找方法是(___________)。
答案:散列查找(8)一个按元素值排好的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,平均比较次数分别是s和b,在查找成功的情况下,s和b的关系是(___________);在查找不成功的情况下,s和b的关系是(___________)。
答案:(1)(2s-1)b=2s([log2(2s-1)]+1)-2[log2(2s-1)]+1+1(2)分两种情况考虑,见解答。
数据结构课后习题答案1--7
数据结构课后习题答案1--7题目1:请你设计一个栈数据结构,使其具备以下功能:可以在O(1)的时间复杂度内获取栈的最小元素。
解答1:要实现在O(1)的时间复杂度内获取栈的最小元素,可以使用两个栈来实现。
一个栈用来保存原始数据,另一个栈用来保存当前栈的最小元素。
具体实现如下:1. 初始化两个栈:stack和min_stack,其中stack用于保存所有元素,min_stack用于保存当前栈中的最小元素。
2. 插入元素时,先将元素插入stack中,然后判断插入的元素是否比min_stack的栈顶元素小,如果是,则将元素也插入到min_stack中;如果不是,则将min_stack的栈顶元素再次插入到min_stack中。
3. 删除元素时,分别从stack和min_stack中弹出栈顶元素。
这样,min_stack的栈顶元素始终是stack中的最小元素。
题目2:请你设计一个队列数据结构,使其具备以下功能:可以在O(1)的时间复杂度内获取队列的最大元素。
解答2:要实现在O(1)的时间复杂度内获取队列的最大元素,可以使用两个队列来实现。
一个队列用来保存原始数据,另一个队列用来保存当前队列的最大元素。
具体实现如下:1. 初始化两个队列:queue和max_queue,其中queue用于保存所有元素,max_queue用于保存当前队列中的最大元素。
2. 插入元素时,先将元素插入queue中,然后判断插入的元素是否比max_queue的队尾元素大,如果是,则将元素也插入到max_queue的队尾;如果不是,则将max_queue中所有比插入元素小的元素都弹出,再将插入元素插入到max_queue的队尾。
3. 删除元素时,分别从queue和max_queue中弹出队头元素。
这样,max_queue的队头元素始终是queue中的最大元素。
题目3:请你设计一个栈数据结构,使其除了具有常规的入栈和出栈功能外,还具备以下功能:能够在O(1)的时间复杂度内获取栈中的最大元素。
数据结构课后习题答案1--7
习题11.解释以下概念:逻辑结构,存储结构,操作,数据结构,数据结构的表示,数据结构的实现,抽象数据类型,算法,算法的时间代价,算法的空间代价,大O 表示法。
2.理解以下关系:算法与数据结构的关系;数据结构与抽象数据类型的关系;算法和数据结构与问题求解的关系。
3. 写出下列程序段的平均情况下的时间代价O表示式。
(1) a=b+c;d=a+e(2) sum=0;for (i=0;i<3;i++)for (j=0;j<n;j++)sum++;(3) x=n;y=0;while (x>=(y+1)*(y+1))y++;(4) s=0;if(even(n))for (i=0;i<n;i++)sum++;elses=s+n;(5) x=66;n=200;while (n>0){if(x>lO0){ x=x-10;n=n-1;}elsex=x+1;}4.对于给定的n个元素,可以构造出的逻辑结构有,,,四种。
5.按增长率由小到大的顺序排列下列各函数:2100, (32)n, (23)n, (43)n, n n, n32, n!, n, log2n, n/log2n习题22.1已知L是无头结点的单链表,且p结点既不是第一个结点,也不是最后一个结点,试从下列提供的语句中选出合适的语句序列:(1)在p结点之后插入s结点:(2)在p结点之前插入s结点:(3)在单链表L首插入s结点:(4)在单链表L后插入s结点:提供的语句:①p->next=s;②p->next=p->next->next;③p->next=s->next;④s->next=p->next;⑤s->next=L;⑥s->next=p;⑦s->next=NULL;⑧q=p;⑨while(p->next!=q)p=p->next;⑩while(p->next!=NULL)p=p->next;⑾p=q;⑿p=L;⒀L=s;⒁L=p;2.2已知p结点是某双向链表的中间结点,试从下列提供的语句中选出合适的语句序列。
数据结构第七章习题答案
第七章图
1.下面是一个图的邻接表结构,画出此图,并根据此存储结构和深度优先搜索
算法写出从C开始的深度优先搜索序列。
0A13^
1B35^
2C30^
3D4^
4E^
5F4^
【解答】
A B F
C D E
C开始的深度优先搜索序列:CDEABF(唯一的结果)
2.假定要在某县所辖六个镇(含县城)之间修公路,若镇I和镇J之间有可能通
过道路连接,则Wij表示这条路的长度。
要求每个镇都通公路且所修公路总里程
最短,那么应选择哪些线路来修。
I11112233445 J23564546566 W ij1239102626474
(1).画出该图。
(2).用C语言描述该图的数组表示法存储结构,并注明你所使用变量的实际含义。
(3).图示你所定义的数据结构。
(4).标识出你选择的线路。
【解答】
(1)
(2)
#define MAX 6
char vexs[MAX];
出该图的所有强连通分量。
(2).在图中删除弧<2,1>,然后写出从顶点1开始的拓扑有序序列。
【解答】
(1) 共4个强连通分量:
(2) 1,3,2,6,5,4
5 4
6 1 3 2
4
15 10
2
15 20 30 4 10
10。
数据结构第七章课后习题答案 (1)
7_1对于图题7.1(P235)的无向图,给出:(1)表示该图的邻接矩阵。
(2)表示该图的邻接表。
(3)图中每个顶点的度。
解:(1)邻接矩阵:0111000100110010010101110111010100100110010001110(2)邻接表:1:2----3----4----NULL;2: 1----4----5----NULL;3: 1----4----6----NULL;4: 1----2----3----5----6----7----NULL;5: 2----4----7----NULL;6: 3----4----7----NULL;7: 4----5----6----NULL;(3)图中每个顶点的度分别为:3,3,3,6,3,3,3。
7_2对于图题7.1的无向图,给出:(1)从顶点1出发,按深度优先搜索法遍历图时所得到的顶点序(2)从顶点1出发,按广度优先法搜索法遍历图时所得到的顶点序列。
(1)DFS法:存储结构:本题采用邻接表作为图的存储结构,邻接表中的各个链表的结点形式由类型L_NODE规定,而各个链表的头指针存放在数组head中。
数组e中的元素e[0],e[1],…..,e[m-1]给出图中的m条边,e中结点形式由类型E_NODE规定。
visit[i]数组用来表示顶点i是否被访问过。
遍历前置visit各元素为0,若顶点i被访问过,则置visit[i]为1.算法分析:首先访问出发顶点v.接着,选择一个与v相邻接且未被访问过的的顶点w访问之,再从w 开始进行深度优先搜索。
每当到达一个其所有相邻接的顶点都被访问过的顶点,就从最后访问的顶点开始,依次退回到尚有邻接顶点未曾访问过的顶点u,并从u开始进行深度优先搜索。
这个过程进行到所有顶点都被访问过,或从任何一个已访问过的顶点出发,再也无法到达未曾访问过的顶点,则搜索过程就结束。
另一方面,先建立一个相应的具有n个顶点,m条边的无向图的邻接表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.22③试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。
注意:算法中涉及的图的基本操作必须在此存储结构上实现。
实现下列函数:Status DfsReachable(ALGraph g, int i, int j);/* Judge if it exists a path from vertex 'i' to *//* vertex 'j' in digraph 'g'. */ /* Array 'visited[]' has been initialed to 'false'.*/图的邻接表以及相关类型和辅助变量定义如下:Status visited[MAX_VERTEX_NUM];typedef char VertexType;typedef struct ArcNode {int adjvex;struct ArcNode *nextarc;} ArcNode;typedef struct VNode {V ertexType data;ArcNode *firstarc;} VNode, AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices;int vexnum, arcnum;} ALGraph;Status DfsReachable(ALGraph g, int i, int j)/* Judge if it exists a path from vertex 'i' to *//* vertex 'j' in digraph 'g'. */ /* Array 'visited[]' has been initialed to 'false'.*/{int k;ArcNode *p;visited[i]=1;for(p=g.vertices[i].firstarc;p;p=p->nextarc){if(p){k=p->adjvex;if(k==j)return 1;if(visited[k]!=1)if(DfsReachable(g,k,j))return 1;}}return 0;}7.23③同7.22题要求。
试基于图的广度优先搜索策略写一算法。
实现下列函数:Status BfsReachable(ALGraph g, int i, int j);/* Determine whether it exists path from vertex i to *//* vertex j in digraph g with Breadth_First Search. *//* Array 'visited' has been initialed to 'false'. */图的邻接表以及相关类型和辅助变量定义如下:Status visited[MAX_VERTEX_NUM];typedef char VertexType;typedef struct ArcNode {int adjvex;struct ArcNode *nextarc;} ArcNode;typedef struct VNode {V ertexType data;ArcNode *firstarc;} VNode, AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices;int vexnum, arcnum;} ALGraph;Status InitQueue(Queue &q);Status EnQueue(Queue &q, int e);Status DeQueue(Queue &q, int &e);Status QueueEmpty(Queue q);Status GetFront(Queue q, int &e);Status BfsReachable(ALGraph g, int i, int j)/* Determine whether it exists path from vertex i to *//* vertex j in digraph g with Breadth_First Search. *//* Array 'visited' has been initialed to 'false'. */{Queue q;int k,n;ArcNode *p;InitQueue(q);EnQueue(q,i);while(!QueueEmpty(q)){DeQueue(q,k);visited[k]=1;for(p=g.vertices[k].firstarc;p;p=p->nextarc){n=p->adjvex;if(n==j)return 1;if(visited[n]!=1)EnQueue(q,n);}}return 0;}7.24③试利用栈的基本操作编写,按深度优先搜索策略遍历一个强连通图的非递归形式的算法。
算法中不规定具体的存储结构,而将图Graph看成是一种抽象的数据类型。
实现下列函数:void Traverse(Graph dig, VertexType v0, void(*visit)(VertexType));/* Travel the digraph 'dig' with Depth_First Search. */图以及相关类型、函数和辅助变量定义如下:Status visited[MAX_VERTEX_NUM];int LocateVex(Graph g, VertexType v);VertexType GetVex(Graph g, int i);int FirstAdjVex(Graph g, int v);int NextAdjVex(Graph g, int v, int w);void visit(char v);Status InitStack(SStack &s);Status Push(SStack &s, SElemType x);Status Pop(SStack &s, SElemType &x);Status StackEmpty(SStack s);Status GetTop(SStack s, SElemType &e);void Traverse(Graph dig, V ertexType v0, void (*visit)(VertexType)){int i,v,flag;SStack s;VertexType p; //flag来记录某点还有没有邻接点InitStack(s);if(dig.vexnum&&dig.arcnum){ i=LocateVex(dig,v0);visited[i]=TRUE;visit(v0);Push(s,v0);while(!StackEmpty(s)){GetTop(s,p);v=LocateVex(dig,p);flag=0;for(i=FirstAdjVex(dig,v);i>=0;i=NextAdjVex(dig,v,i)){ if(!visited[i]) {p=GetVex(dig,i); flag=1; break;}}if(flag){visit(p);visited[i]=TRUE;Push(s,p);}else{Pop(s,p); }}}}7.27④采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
实现下列函数:Status SinglePath(ALGraph g, VertexType sv, VertexType tv,int k, char *sp);/* Judge whether it exists a path from sv to tv with length k *//* in graph g, return path using string sp if exists. */图的邻接表以及相关类型、函数和辅助变量定义如下:Status visited[MAX_VERTEX_NUM];typedef char StrARR[100][MAX_VERTEX_NUM+1];typedef char VertexType;typedef struct ArcNode {int adjvex;struct ArcNode *nextarc;} ArcNode;typedef struct VNode {V ertexType data;ArcNode *firstarc;} VNode, AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices;int vexnum, arcnum;} ALGraph;int LocateVex(Graph g, VertexType v);void inpath(char *&path, VertexType v);/* Add vertex 'v' to 'path' */void depath(char *&path, VertexType v);/* Remove vertex 'v' from 'path' */Status SinglePath(ALGraph g, VertexType sv, VertexType tv, int k, char *sp) /* Judge whether it exists a path from sv to tv with length k *//* in graph g, return path using string sp if exists. */{ int i,j,l;ArcNode *p;if(sv==tv && k==0){ inpath(sp,tv);return OK; }else{i=LocateVex(g,sv);visited[i]=1;inpath(sp,sv);for(p=g.vertices[i].firstarc;p;p=p->nextarc){l=p->adjvex;if(!visited[l]){if(SinglePath(g,g.vertices[l].data,tv,k-1,sp))return OK;elsedepath(sp,g.vertices[l].data);}}visited[i]=0;}}7.28⑤已知有向图和图中两个顶点u和v,试编写算法求有向图中从u到v的所有简单路径。