数据结构单元8练习参考答案
智慧树知到《数据结构》章节测试答案

第1章单元测试1、算法的时间复杂度取决于___。
答案:A和B2、数据在计算机内存中的表示是指()答案:数据的存储结构3、算法指的是()答案:求解特定问题的指令有限序列4、在数据结构中,与所使用的计算机无关的数据结构是()答案:逻辑7、某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为( )。
答案:1448、算法能正确地实现预定功能的特性称为算法的()。
答案:正确性第2章单元测试1、链表不具备的特点是()。
答案:可随机访问任意一个结点3、线性表的顺序存储表示优于链式存储表示。
答案:错4、顺序存储结构的缺点是不便于修改,插入和删除需要移动很多结点。
答案:对5、在设头、尾指针的单链表中,与长度n有关的操作是( )。
答案:删除最后一个结点6、设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B间插入结点X的操作序列为( )。
答案:q->next=s; s->next=p;7、对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( )。
答案:用尾指针表示的循环单链表8、在一个单链表中,若p所指节点不是最后节点,在p之后插入s所指节点,则执行( )。
答案:s->link=p->link;p->link=s;9、在双向链表存储结构中,删除p所指的结点时须修改指针____。
答案:p->next->prior=p->prior; p->prior->next=p->next;10、若事先不知道线性表的长度,则处理线性表时较好的存储结构是( )。
答案:单链表11、向一个有127个元素的顺序表中插入一个新元素并保存,原来顺序不变,平均要移动( )个元素。
答案:63.512、某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为( )。
《数据结构(C语言版 第2版)》(严蔚敏 著)第八章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第八章练习题答案第8章排序1.选择题(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为()。
A.归并排序B.冒泡排序C.插入排序D.选择排序答案:C(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为()。
A.归并排序B.冒泡排序C.插入排序D.选择排序答案:D(3)对n个不同的关键字由小到大进行冒泡排序,在下列()情况下比较的次数最多。
A.从小到大排列好的B.从大到小排列好的C.元素无序D.元素基本有序答案:B解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。
(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为()。
A.n+1B.n C.n-1D.n(n-1)/2答案:D解释:比较次数最多时,第一次比较n-1次,第二次比较n-2次……最后一次比较1次,即(n-1)+(n-2)+…+1=n(n-1)/2。
(5)快速排序在下列()情况下最易发挥其长处。
A.被排序的数据中含有多个相同排序码B.被排序的数据已基本有序C.被排序的数据完全无序D.被排序的数据中的最大值和最小值相差悬殊答案:C解释:B选项是快速排序的最坏情况。
(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是()。
A.O(n)B.O(n2)C.O(nlog2n)D.O(n3)答案:B解释:快速排序的平均时间复杂度为O(nlog2n),但在最坏情况下,即关键字基本排好序的情况下,时间复杂度为O(n2)。
(7)若一组记录的排序码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。
A.38,40,46,56,79,84B.40,38,46,79,56,84C.40,38,46,56,79,84D.40,38,46,84,56,79答案:C(8)下列关键字序列中,()是堆。
《数据结构》第八章习题参考答案 (1)

有向图的任意顶点的度=邻接表中顶点所对应边链表中结点个数+逆邻接表中顶点所对应边链表中结点个数;
4、课本P3928.3题
【解答】
n个顶点的无向连通图至少有n-1条边,n个பைடு நூலகம்点的无向强连通图至少有n(n-1)/2条边;n个顶点的有向连通图至少有n条边,n个顶点的有向强连通图至少有n(n-1)条边。
上面不正确的是(A)。
A.(1),(2),(3) B.(1) C.(1),(3) D.(2),(3)
5、下列说法不正确的是(C)。
A.图的遍历是从给定的源点出发每一个顶点仅被访问一次
B.遍历的基本算法有两种:深度遍历和广度遍历
C.图的深度遍历不适用于有向图
D.图的深度遍历是一个递归过程
三、填空题
1、判断一个无向图是一棵树的条件是_有n个顶点,n-1条边的无向连通图_。
注: 答案并不唯一
2、课本P3928.1题
【解答】
(1)不是强连通图
(2)简单路径如:D->B->C->F
(3)略
(4)邻接表见图,其他略
3、课本P3928.2题
【解答】
(1)邻接矩阵表示:无向图的边数为
矩阵中非零元素的个数/2;有向图的边数为矩阵中非零元素的个数。
邻接表表示时:无向图的边数为邻接表中边结点的个数/2;有向图的边数为邻接表中边结点的个数。
(2)(3)略
12、课本P3958.24题
【解答】
A->B : 10
A->B->D: 15
A->B->D->C : 17
A->B->D->E : 17
数据结构(第二版)习题答案第8章

(3)9个顶点。
8.5图8.35所示的是某个无向图的邻接表,试:
(1)画出此图;
(2)写出从顶点A开始的DFS遍历结果;
(3)写出从顶点A开始的BFS遍历结果。
【答】:
(1)图8.35邻接表对应的无向图如图8.35.1所示。
图8.35.1
图8.35题8.5的邻接表
(2)从顶点A开始的DFS遍历结果是:A,B,C,F,E,G,D
活动e
l
l-e关键活动
v0
v1
v2
v3
v4
v5
0
6
4
13
22
25
0
6
5
13
22
25
a0
a1
a2
a3
a4
a5
a6
a7
0
0
6
4
4
13
13
22
0
1
6
5
5
13
15
22
0
1
0
1
1
0
2
0
√
√
√
√
可见,该AOE网的关键路径是a0,a2,a5,a7。(注:图中箭头指示求解的顺序)
8.12无向图采用邻接表作为存储结构,试写出以下算法
量,这样T’的边数将大于n-1)。这与T’是一棵树的假设
相矛盾。证毕。
8.8对如图8.36所示的连通图,分别用Prim和Kruskal
算法构造其最小生成树。
【答】:
(1)采用Prim算法求解最小生成树的过程如图8.36.1
所示。
图8.36无向连通网
79
C
2
A
大学计算机《数据结构》试卷及答案(八)

大学计算机《数据结构》试卷及答案一、选择题(30分)1.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为()。
(A) O(n) (B) O(nlog2n) (C) O(1) (D) O(n2)2.设一棵二叉树的深度为k,则该二叉树中最多有()个结点。
(A) 2k-1 (B) 2k(C) 2k-1(D) 2k-13.设某无向图中有n个顶点e条边,则该无向图中所有顶点的入度之和为()。
(A) n (B) e (C) 2n (D) 2e4.在二叉排序树中插入一个结点的时间复杂度为()。
(A) O(1) (B) O(n) (C) O(log2n) (D) O(n2)5.设某有向图的邻接表中有n个表头结点和m个表结点,则该图中有()条有向边。
(A) n (B) n-1 (C) m (D) m-16.设一组初始记录关键字序列为(345,253,674,924,627),则用基数排序需要进行()趟的分配和回收才能使得初始关键字序列变成有序序列。
(A) 3 (B) 4 (C) 5 (D) 87.设用链表作为栈的存储结构则退栈操作()。
(A) 必须判别栈是否为满(B) 必须判别栈是否为空(C) 判别栈元素的类型(D) 对栈不作任何判别8.下列四种排序中()的空间复杂度最大。
(A) 快速排序(B) 冒泡排序(C) 希尔排序(D) 堆9.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2,则下列等式成立的是()。
(A) N0=N1+1 (B) N0=N l+N2(C) N0=N2+1 (D) N0=2N1+l10.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过()。
(A) log2n+1 (B) log2n-1 (C) log2n (D) log2(n+1)二、填空题(42分)1.设有n个无序的记录关键字,则直接插入排序的时间复杂度为________,快速排序的平均时间复杂度为_________。
(完整版)数据结构与算法第8章答案

第8 章排序技术课后习题讲解1. 填空题⑴排序的主要目的是为了以后对已排序的数据元素进行()。
【解答】查找【分析】对已排序的记录序列进行查找通常能提高查找效率。
⑵对n个元素进行起泡排序,在()情况下比较的次数最少,其比较次数为()。
在()情况下比较次数最多,其比较次数为()。
【解答】正序,n-1,反序,n(n-1)/2⑶对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行直接插入排序,当把第7个记录60插入到有序表时,为寻找插入位置需比较()次。
【解答】3【分析】当把第7个记录60插入到有序表时,该有序表中有2个记录大于60。
⑷对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行快速排序,在递归调用中使用的栈所能达到的最大深度为()。
【解答】3⑸对n个待排序记录序列进行快速排序,所需要的最好时间是(),最坏时间是()。
【解答】O(nlog2n),O(n2)⑹利用简单选择排序对n个记录进行排序,最坏情况下,记录交换的次数为()。
【解答】n-1⑺如果要将序列(50,16,23,68,94,70,73)建成堆,只需把16与()交换。
【解答】50⑻对于键值序列(12,13,11,18,60,15,7,18,25,100),用筛选法建堆,必须从键值为()的结点开始。
【解答】60【分析】60是该键值序列对应的完全二叉树中最后一个分支结点。
2. 选择题⑴下述排序方法中,比较次数与待排序记录的初始状态无关的是()。
A插入排序和快速排序B归并排序和快速排序C选择排序和归并排序D插入排序和归并排序【解答】C【分析】选择排序在最好、最坏、平均情况下的时间性能均为O(n2),归并排序在最好、最坏、平均情况下的时间性能均为O(nlog2n)。
⑵下列序列中,()是执行第一趟快速排序的结果。
A [da,ax,eb,de,bb] ff [ha,gc]B [cd,eb,ax,da] ff [ha,gc,bb]C [gc,ax,eb,cd,bb] ff [da,ha]D [ax,bb,cd,da] ff [eb,gc,ha]【解答】A【分析】此题需要按字典序比较,前半区间中的所有元素都应小于ff,后半区间中的所有元素都应大于ff。
数据结构与算法 模拟试卷七、八及参考答案

模拟试卷七一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内。
每小题1分,共10分)1.假设执行语句S的时间为O(1),则执行下列程序段for(i=1;i<=n;i++)for(j=i;j<=n;j++)S;的时间为( )A)O(n)B)O(n2)C)O(n*i)D)O(n+i)2.设栈最大长度为3,入栈序列为1,2,3,4,5,6,则不可能的出栈序列是()。
A)1,2,3,4,5,6 B)2,1,3,4,5,6C)3,4,2,1,5,6 D)4,3,2,1,5,63.设单链表的结点结构为(data,next),已知指针q所指结点是指针p所指结点的直接前驱,如在*q与*p之间插入结点*s,则应执行的操作为()。
A)s->next=p->next; p->next=s; B)q->next=s; s->next=p;C)p->next=s-next; s->next=p; D)p->next=s; s-next=q;4.串S='ABC DEF'的串长为()。
A)3 B)4C)7 D)85.下面二叉树按()遍历得到的序列是FEDBIHGCA。
A)先序B)中序C)后序D)层次6.用Floyd算法求每一对顶点之间的最短路径的时间复杂度为()。
A)O(n) B)O(n2)C)O(n3) D)O(nlogn)7.具有n个顶点的无向图,它可能具有的边数的最大值为()。
A)(n2+n)/2 B)n2C)(n2-n)/2 D)n8.二分查找法要求被查找的表是()。
A)顺序表B)链接表C)顺序表且是按值递增或递减次序排列D)不受上述的任何限制9.在一待散列存储的线性表(18,25,63,50,42,32,90),若选用h(k)=k % 7作为散列函数,则与元素18冲突的元素有( )个。
A)0 B)1C)2 D)310.在下列排序算法中,不稳定的是()。
数据结构(C语言版清华大学出版社)8-9章课后部分答案

第八章选择题1.C2.A3.B4.C5.D6.B7.B8.A9.D 10.D 11.C 12.C填空题1. n、n+12. 43. 8.25( 折半查找所在块 )4. 左子树、右子树5. 266. 顺序、(n+1)/2、O(log2n)7. m-1、[m/2]-18. 直接定址应用题1. 进行折半查找时,判定树是唯一的,折半查找过程是走了一条从根节点到末端节点的路径,所以其最大查找长度为判定树深度[log2n]+1.其平均查找长度约为[log2n+1]-1.在二叉排序树上查找时,其最大查找长度也是与二叉树的深度相关,但是含有n个节点的二叉排序树不是唯一的,当对n个元素的有序序列构造一棵二叉排序树时,得到的二叉排序树的深度也为n,在该二叉树上查找就演变成顺序查找,此时的最大查找长度为n;在随机情况下二叉排序树的平均查找长度为1+4log2n。
因此就查找效率而言,二分查找的效率优于二叉排序树查找,但是二叉排序树便于插入和删除,在该方面性能更优。
3. 评价哈希函数优劣的因素有:能否将关键字均匀的映射到哈希表中,有无好的处理冲突的方法,哈希函数的计算是否简单等。
冲突的概念:若两个不同的关键字Ki和Kj,其对应的哈希地址Hash(Ki) = Hash(Kj),则称为地址冲突,称Ki和K,j为同义词。
(1)开放定址法(2)重哈希法(3)链接地址法4.(1)构造的二叉排序树,如图(2)中序遍历结果如下:10 12 15 20 24 28 30 35 46 50 55 68(4)平均查找长度如下:ASLsucc = (1x1+2x2+3x3+4x3+5x3)/12 = 41/128.哈希地址如下:H(35) = 35%11 = 2H(67) = 67%11 = 1H(42) = 42%11 = 9H(21) = 21%11 = 10H(29) = 29%11 = 7H(86) = 86%11 = 9H(95) = 95%11 = 7H(47) = 47%11 = 3H(50) = 50%11 = 6H(36) = 36%11 = 3H(91) = 91%11 = 3第九章选择题1.D2.C3.B4.D5.C6.B7.A8.A9.D 10.D填空题1. 插入排序、交换排序、选择排序、归并排序2. 移动(或者交换)3. 归并排序、快速排序、堆排序4. 保存当前要插入的记录,可以省去在查找插入位置时的对是否出界的判断5. O(n)、O(log2n)6. 直接插入排序或者改进了的冒泡排序、快速排序7. Log2n、n8. 完全二叉树、n/29. 1510. {12 38 25 35 50 74 63 90}应用题2.(1)Shell排序(步长为5 3 1)每趟的排序结果初始序列为100 87 52 61 27 170 37 45 61 118 14 88 32步长为5的排序14 37 32 61 27 100 87 45 61 118 170 88 52步长为3的排序结果14 27 32 52 37 61 61 45 88 87 170 100 118步长为1的排序结果14 27 32 37 45 52 61 61 87 88 100 118最后结果14 27 32 37 45 52 61 61 87 88 100 118 170(2)快速排序每趟的排序结果如图初始序列100 87 52 61 27 170 37 45 61 118 14 88 32第一趟排序[32 87 52 61 27 88 37 45 61 14]100[118 170]第二趟排序[14 27]32[61 52 88 37 45 61 87]100 118[170]第三趟排序14[27]32[45 52 37]61[88 61 87]100 118[170]第四趟排序14[27]32[37]45[52]61[87 61]88 100 118[170]第五趟排序14[27]32[37]45[52]61[87 61]88 100 118[170]最后结果14[27]32[37]45[52]61[61]87 88 100 118[170](3)二路归并排序每趟的排序结果初始序列[100][87][52][61][27][170][37][45][61][118][14][88][32]第一趟归并[87 100][52 61][27 170][37 45][61 118][14 88][32]第二趟归并[52 61 87 100][27 37 45 170][14 61 88 118][32]第三趟归并排序[27 37 45 52 61 87 100 170][14 32 61 88 118]第四趟归并排序[14 27 32 37 45 52 61 61 87 88 100 118 170]最后结果14 27 32 37 45 52 61 61 87 88 100 118 1705. 采用快速排序时,第一趟排序过程中的数据移动如图:算法设计题1.分析:为讨论方便,待排序记录的定义为(后面各算法都采用此定义):#define MAXSIZE 100 /* 顺序表的最大长度,假定顺序表的长度为100 */ typedef int KeyType; /* 假定关键字类型为整数类型 */typedef struct {KeyType key; /* 关键字项 */OtherType other; /* 其他项 */}DataType; /* 数据元素类型 */typedef struct {DataType R[MAXSIZE+1]; /* R[0]闲置或者充当哨站 */int length; /* 顺序表长度 */}sqList; /* 顺序表类型 */设n个整数存储在R[1..n]中,因为前n-2个元素有序,若采用直接插入算法,共要比较和移动n-2次,如果最后两个元素做一个批处理,那么比较次数和移动次数将大大减小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单元练习8一.判断题〔以下各题,正确的请在前面的括号内打√;错误的打╳〕〔√〕〔1〕图可以没有边,但不能没有顶点。
〔ㄨ〕〔2〕在无向图中,〔V1,V2〕与〔V2,V1〕是两条不同的边。
〔ㄨ〕〔3〕邻接表只能用于有向图的存储。
〔√〕〔4〕一个图的邻接矩阵表示是唯一的。
〔ㄨ〕〔5〕用邻接矩阵法存储一个图时,所占用的存储空间大小与图中顶点个数无关,而只与图的边数有关。
〔ㄨ〕〔6〕有向图不能进展广度优先遍历。
〔√〕〔7〕假设一个无向图的以顶点V1为起点进展深度优先遍历,所得的遍历序列唯一,则可以唯一确定该图。
〔√〕〔8〕存储无向图的邻接矩阵是对称的,因此只要存储邻接矩阵的上三角〔或下三角〕局部就可以了。
〔ㄨ〕〔9〕用邻接表法存储图时,占用的存储空间大小只与图中的边数有关,而与结点的个数无关。
〔√〕〔10〕假设一个无向图中任一顶点出发,进展一次深度优先遍历,就可以访问图中所有的顶点,则该图一定是连通的。
二.填空题(1)图常用的存储方式有邻接矩阵和邻接表等。
(2)图的遍历有:深度优先搜和广度优先搜等方法。
(3)有n条边的无向图邻接矩阵中,1的个数是_2n____。
(4)有向图的边也称为_ 弧___。
(5)图的邻接矩阵表示法是表示__顶点____之间相邻关系的矩阵。
(6)有向图G用邻接矩阵存储,其第i行的所有元素之和等于顶点i的__出度____。
(7)n个顶点e条边的图假设采用邻接矩阵存储,则空间复杂度为: O〔n2〕。
(8)n个顶点e条边的图假设采用邻接表存储,则空间复杂度为: O〔n+e〕。
(9)设有一稀疏图G,则G采用_邻接表____存储比拟节省空间。
(10)设有一稠密图G,则G采用_邻接矩阵____存储比拟节省空间。
(11)图的逆邻接表存储构造只适用于__有向____图。
(12) n个顶点的完全无向图有 n(n-1)/2_ 条边。
(13)有向图的邻接表表示适于求顶点的出度。
(14)有向图的邻接矩阵表示中,第i列上非0元素的个数为顶点V i的入度。
(15)对于具有n个顶点的图,其生成树有且仅有 n-1 条边。
(16)对n个顶点,e条弧的有向图,其邻接表表示中,需要 n+e 个结点。
(17)从图中*一顶点出发,访遍图中其余顶点,且使每一顶点仅被访问一次,称这一过程为图的遍历。
(18)无向图的邻接矩阵一定是对称矩阵。
(19)一个连通网的最小生成树是该图所有生成树中权最小的生成树。
(20)假设要求一个稠密图G的最小生成树,最好用Prim算法来求解。
三.选择题〔1〕在一个图中,所有顶点的度数之和等于图的边数的( C )倍。
A.1/2 B. 1 C. 2 D. 4〔2〕在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( B )倍。
A.1/2 B. 1 C. 2D. 4〔3〕对于一个具有n个顶点的有向图的边数最多有〔 B 〕。
A.n B.n(n-1) C.n(n-1)/2 D.2n〔4〕在一个具有n个顶点的无向图中,要连通全部顶点至少需要〔 C 〕条边。
A.n B.n+1 C. n-1 D.n/2〔5〕有8个结点的有向完全图有( C )条边。
A.14B. 28C. 56D. 112〔6〕深度优先遍历类似于二叉树的( A )。
A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历〔7〕广度优先遍历类似于二叉树的( D )。
A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历〔8〕任何一个无向连通图的最小生成树( A )。
A.只有一棵 B.一棵或多棵 C.一定有多棵 D.可能不存在〔9〕无向图顶点v的度是关联于该顶点〔 B 〕的数目。
A.顶点B.边C.序号D.下标〔10〕有n个顶点的无向图的邻接矩阵是用〔 B 〕数组存储。
A.一维B.n行n列C.任意行n列D.n行任意列〔11〕对于一个具有n个顶点和e条边的无向图,采用邻接表表示,则表头向量大小为〔 C 〕。
A.n-1 B.n+1 C.n D.n+e〔12〕在图的表示法中,表示形式唯一的是〔 A 〕。
A.邻接矩阵表示法 B.邻接表表示法C.逆邻接表表示法 D.邻接表和逆邻接表表示法〔13〕在一个具有n个顶点e条边的图中,所有顶点的度数之和等于〔 C 〕。
A.n B.e C. 2n D.2e〔14〕以下图中,度为3的结点是〔B〕。
〔15A .连通图 B. 强连通图 C. 生成树 D. 无环图〔16〕如以下图所示,从顶点a 出发,按深度优先进展遍历,则可能得到的一种顶点序列为〔D 〕。
A . a ,b ,e ,c ,d ,fB . a ,c ,f ,e ,b ,d C. a ,e ,b ,c ,f ,dD. a ,e ,d ,f ,c ,b〔17〕如以下图所示,从顶点a A 〕。
A. a ,b ,e ,c ,d ,fB. a ,b ,e ,c ,f ,dC. a ,e ,b ,c ,f ,dD. a ,e ,d ,f ,c ,b〔18〕最小生成树的构造可使用〔 A A .prim 算法 B .卡尔算法 C 〔19〕下面关于图的存储构造的表达中正确的选项是〔 A 〕。
A . 用邻接矩阵存储图,占用空间大小只与图中顶点数有关,而与边数无关B . 用邻接矩阵存储图,占用空间大小只与图中边数有关,而与顶点数无关C . 用邻接表存储图,占用空间大小只与图中顶点数有关,而与边数无关D . 用邻接表存储图,占用空间大小只与图中边数有关,而与顶点数无关 〔20〕连通分量是〔 C 〕的极**通子图。
A .树B .图C .无向图D .有向图四.应用题〔30分〕1.有向图如以下图所示,画出邻接矩阵和邻接表2. 一个无向图有6个结点,9条边,这9条边依次为〔0,1〕,〔0,2〕,〔0,4〕,〔0,5〕,〔1,2〕,〔2,3〕,〔2,4〕,〔3,4〕,〔4,5〕。
试画出该无向图,并从顶点0出发,分别写出按深度优先搜索和按广度优先搜索进展遍历的结点序列。
〔5分〕 解:〔答案不唯一〕从顶点0出发的广度优先搜索遍历的结点序列:0 1 2 4 5 3〔答案不唯一〕3. 一个无向图的顶点集为:{a ,b ,c ,d ,e},其邻接矩阵如下,画出草图,写出顶点a 出发按深度优先搜索进展遍历的结点序列。
〔5分〕 解: 〔1〕〔2〕深度优先搜索:a b d c e 〔答案不唯一〕广度优先搜索:a b e d c 〔答案不唯一〕4.网G 的邻接矩阵如下,试画出该图,并画出它的一棵最小生成树。
解: 最小生成树: 8 11 10 83 4 13 7 3 47 5. *图G 的邻接矩阵如图,〔1〕画出相应的图;〔2〕要使此图为完全图需要增加几条边。
解: 〔1〕 〔2〕 完全无向图应具有的边数为:n*(n-1)1/2=4*(4-1)/2=6,所以还要增加2条边〔如右图〕。
6.如下图的有向图,请给出该图的:(1) 每个顶点的入/出度;(2) 邻接表;〔3〕 邻接矩阵。
解: 〔1〕 〔2〕 〔3〕 7.如图,请完成以下操作:〔2〕 写出无向带权图的邻接矩阵; 〔3〕 设起点为a ,求其最小生成树。
解:〔1〕邻接矩阵为: 〔2〕起点为a ,可以直接由原始图画出最小生成树 8.给定以下网G:(1) 画出网G 的邻接矩阵; (2) 画出网G 的最小生成树。
解:〔1〕邻接矩阵 〔2〕最小生成树a cb e d254 3 12 5 43 14 23 1 1 3 4 2顶点 1 2 3 4 5 6 入度 3 2 1 1 2 2 出度 0 2 2 3 1 3⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞1012696841015121520982012412 五.程序题填空题图G 为有向无权图,试在邻接矩阵存储构造上实现删除一条边(v,w)的操作:DeleteArc(G,v,w)。
假设无顶点v 或w ,返回"ERROR 〞;假设成功删除,则边数减1,并返回"OK 〞。
〔提示:删除一条边的操作,可以将邻接矩阵的第i 行全部置0 〕 解:Status DeleteArc(MGraph &G,char v,char w) //在邻接矩阵表示的图G 上删除边(v,w) { if ((i=LocateVe*(G,v))<0) return ERROR ; if ((j=LocateVe*(G,w))<0) return ERROR ; if (G.arcs[i][j].adj) { G.arcs[i][j].adj= 0 ;G.arum -- ; 〔或 G.arum=G.arum-1 〕 }return OK ; }六.算法题1. 编写一个无向图的邻接矩阵转换成邻接表的算法。
2. 以知有n 个顶点的有向图邻接表,设计算法分别实现以下功能: 〔1〕求出图G 中每个顶点的出度、入度。
〔2〕求出G 中出度最大的一个顶点,输出其顶点序号。
〔3〕计算图中度为0的顶点数。
1. 解:此题思想是逐个扫描邻接矩阵的各个元素,假设第i 行第j 列的元素为1,则相应的邻接表的第i 个单链表上增加一个j 结点。
void trans(int edges[n][n],Adjlist adj) { int i,j; edgenode *p; for(i=0;i<n;i++) { adj[i].data=i;adj[i].link=NULL; }for(i=0;i<n;i++) for(j=0;j<n;j++) {if(edges[i][j]==1){ p=(edgenode *)malloc(sizeof(edgenode));p->adjve*=j;p->ne*t=adj[i].link;adj[i].link=p;}}}2.〔1〕求出度的思想:计算出邻接表中第i个单链表的结点数即可。
int outdegree(adjlist adj,int v){ int degree=0;edgenode *p;p=adj[v].link;while(p!=NULL){ degree++;p=p->ne*t;}return degree;}void printout(adjlist adj,int n){ int i,degree;printf("The Outdegree are:\n");for(i=0;i<n;i++){ degree=outdegree(adj,i);printf("(%d,%d)",i,degree);}}求入度的思想:计算出邻接表中结点i的结点数即可。
int indegree(adjlist adj,int n,int v){ int i,j,degree=0;edgenode *p;for(i=0;i<n;i++){ p=adj[i].link;while(p!=NULL){if(p->adjve*==v)degree++;p=p->ne*t;}}return degree;}void printin(adjlist adj,int n){ int i,degree;printf("The Indegree are:\n");for(i=0;i<n;i++){ degree=Indegree(adj,n,i);printf("(%d,%d)",i,degree); } }〔2〕求最大度的算法void ma*outdegree(adjlist adj,int n) { int ma*degree=0,ma*v=0,degree,i; for(i=0;i<n;i++){ degree=outdegree(adj,i); if(degree>ma*degree) { ma*degree=degree; ma*v=i; }}printf("ma*outdegree %d,ma*verte*=%d",ma*degree,ma*v); }〔3〕求度为0的顶点数的算法int outzero(adjlist adj,int n) { int num=0,i; for(i=0;i<n;i++) {if(outdegree(adj,i)==0)num++; }return num; }模拟考题1. 如下图的有向图,请给出该图的: (1) 每个顶点的入度和出度; (2) 逆邻接表。