数据结构(第二版)习题答案第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个元素的存储地址为( )。

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版)第一章:基本概念1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。

它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。

2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括数组、链表、栈和队列;非线性结构包括树和图。

3. 什么是算法?算法是解决特定问题的一系列有序步骤。

它描述了如何输入数据、处理数据,并产生期望的输出结果。

4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。

5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。

第二章:线性表1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。

静态分配使用数组,动态分配使用指针和动态内存分配。

2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和一个指向下一个节点的指针。

它的插入和删除操作效率高,但是查找效率较低。

3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。

双向链表每个节点都有一个指向前一个节点和后一个节点的指针。

4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高,但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查找操作效率较高。

第三章:栈和队列1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和删除操作。

后进先出(LIFO)是栈的特点。

2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插入操作,在另一端进行删除操作。

先进先出(FIFO)是队列的特点。

3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。

4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。

《数据结构(C语言版 第2版)》(严蔚敏 著)第八章练习题答案

《数据结构(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-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

第1章4.答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。

(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。

但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。

所以链式存储结构通常借助于程序设计语言的指针类型来描述。

5. 选择题(1)~(6):CCBDDA6.(1)O(1) (2)O(m*n) (3)O(n2)(4)O(log3n) (5)O(n2) (6)O(n)第2章1.选择题(1)~(5):BABAD (6)~(10):BCABD (11)~(15):CDDAC 2.算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。

要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。

表中不允许有重复的数据。

[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。

如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。

当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){//合并链表La和Lb,合并后的新表使用头指针Lc指向pa=La->next; pb=Lb->next;//pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点Lc=pc=La; //用La的头结点作为Lc的头结点while(pa && pb){ if(pa->data<pb->data){pc->next=pa; pc=pa; pa=pa->next;}//取较小者La中的元素,将pa链接在pc的后面,pa指针后移else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}//取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移else //相等时取La中的元素,删除Lb中的元素{pc->next=pa;pc=pa;pa=pa->next;q=pb->next; delete pb ; pb =q;}}pc->next=pa?pa:pb; //插入剩余段delete Lb; //释放Lb的头结点}(5)设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。

数据结构-c语言描述(第二版)答案耿国华编著

数据结构-c语言描述(第二版)答案耿国华编著

第1章绪论2.(1)×(2)×(3)√3.(1)A(2)C(3)C5.计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/66.编写算法,求一元多项式p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。

注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。

算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。

讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。

【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。

缺点:形参须与实参对应,且返回值数量有限。

(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f”,&a[i]);/*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){p=p+a[i]*x;/*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[],float x,int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p;/*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第2章线性表习题1.填空:(1)在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。

《数据结构》第八章习题参考答案 (1)

《数据结构》第八章习题参考答案 (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章答案

(完整版)数据结构与算法第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。

数据结构实用教程 第二版 徐孝凯 课后答案

数据结构实用教程 第二版 徐孝凯 课后答案

return q; } ⑶ 根据给定x的值计算多项式的值。 float Eval(Quadratic q,float x); 解: float Eval(Quadratic q,float x) { return(q.a*x*x+q.b*x+q.c); } ⑷ 计算方程ax2+bx+c=0的两个实数根,对于有实根、无实根和不是实根方程 (即a==0)这三种情况要返回不同的整数值,以便于工作调用函数做不同的处理。 int Root(Quadratic q,float& r1,float& r2); 解: int Root(Quadratic q,float& r1,float& r2) { if(q.a==0)return -1; float x=q.b*q.b-4*q.a*q.c; if(x>=0){ r1=(float)(-q.b+sqrt(x))/(2*q.a); r2=(float)(-q.b-sqrt(x))/(2*q.a); return 1; } else return 0; } ⑸ 按照ax**2+bx+c的格式(x2用x**2表示)输出二次多项式,在输出时要注意 去掉系数为0的项,并且当b和c的值为负时,其前不能出现加号。 void Print(Quadratic q) 解: void Print(Quadratic q) { if(q.a) cout<<q.a<<"x**2"; if(q.b) if(q.b>0) cout<<"+"<<q.b<<"x"; else cout<<q.b<<"x"; if(q.c) if(q.c>0) cout<<"+"<<q.c; else cout<<q.c; cou其时间复杂度为O(n) ⑸ 假定一维数组a[n]中的每个元素值均在[0,200]区间内,分别统计出落在[0,20) ,[20,50),[50,80),[80,130),[130,200]等各区间的元素个数。 解: int Count(int a[],int n,int c[5])//用数组c[5]保存统计结果 { int d[5]={20,50,80,130,201};//用来保存各统计区间的上限 int i,j; for(i=0;i<5;i++)c[i]=0;//给数组c[5]中的每个元素赋初值0 for(i=0;i<n;i++) { if(a[i]<0||a[i]>200) return 0;//返回数值0表示数组中数据有错,统计失败 for(j=0;j<5;j++)//查找a[i]所在区间 if(a[i]<d[j]) break; c[j]++;//使统计相应区间的元素增1 } return 1;//返回数值1表示统计成功 } 其时间复杂度为O(n) ⑹ 从二维整型数组a[m][n]中查找出最大元素所在的行、列下标。 解: void find(int a[M][N],int m,int n,int&Lin,int&Col) //M和N为全局常量,应满足M>=n和N>=n的条件,Lin和Col为引用 //形参,它是对应实参的别名,其值由实参带回 { Lin=0;Col=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(a[i][j]>a[Lin][Col]){Lin=i;Col=j;} } 其时间复杂度为O(m*n) 4.指出下列各算法的功能并求出其时间复杂度。 ⑴ int prime(int n) { int i=2; int x=(int)sqrt(n); while(i<=x){ if(n%i==0)break; i++; }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)500个。
(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
3
F
1
D
4
4
B
4
G
E
(a)选取(A,F)
(b)选取(D,F)
A.a,b,e,c,d,f B.a,c,f,e,b,d
C.a,e,b,c,f,d
D.a,e,d,f,c,b
(7)下列哪一个选项不是图8.31所示有向图的拓扑排序结果(C)。
A.AFBCDEB.FABCDE
C.FACBDE
D.FADBCE
图8.31 AOV网
75
(8)判断一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用(D)。
在G(V,E)中存在一棵最小生成树包含着Ti,在第i+1步,存在u Ti,v∉Ti,且(u,v)是最
小两栖边,将顶点{v},边(u,v)添加到树Ti中,所得树Ti+1是包含V(Ti)+{v}顶点集的生
成树,且具有i+1个顶点。根据MST性质,此时在G=(V,E)中必存在一棵最小生成树包含着
Ti+1。由此可知,当i=n时,G’(Tn)即为无向图G含有n个顶点的最小生成树。
当然在进行最小两栖边选择时,如果同时存在几个具有相同代价的最小两栖边,则可任选
一条,因些Prim算法构造的最小生成树不是唯一的。但它们的最小(代价)总和是相等的。
8.7证明,用Kruskal算法能正确地生成一棵最小生成树。
【证明】:
算法首先构造具有n个不同顶点的n个连通分量,然后在E(G)中选择边(u,v),若u,v
=1。
(2)该图的邻接矩阵如图8.33.1所示。
76
图8.33.1邻接矩阵
图8.33.2邻接表
(3)该图的邻接表如图8.30.2所示;该图的邻接多重表如图8.30.3所示。
图8.33.3邻接多重表
(4)该图的两个连通分量如图8.33.4所示。
图8.33.4两个连通分量
8.3对于如图8.34所示的有向图,试给出:
(3)从顶点A开始的BFS遍历结果是:A,B,C,D,F,E,G
8.6证明,用Prim算法能正确地生成一棵最小生成树。
【证明】:
78
Prim算法是按照逐边加入的方法来构造最小生成树过程的。记构造过程中生成的子图为
G’,显然G’始终是一棵树。这是因为初始时V(G’)={u0},E(G’)=Ф,是一棵树。随后每一
5、(E,G)5、(A,D)6、(D,G)6、(A,B)7。根据Kruskal算法,构造最小生成树的过程如图
8.33.2所示。
(a)选取(D,F)
(b)选取(C,F)
(c)选取(A,F)
C
2
A
3
F
1
D
4
B
4
G
E
C
2
A
3
F
1
D
4
4
B
4
G
E
(d)选取(F,G)
(e)选取(D,E)
(f)选取(D,B)
图8.36.2 Kruskal算法求解最小生成树过程
成树。
下面证明Prim算法的每一步都能保证G’=(V’,E’)是无向连通网络G=(V,E)上某个代价生成
树的子连通图。
初始时,G’仅有一个顶点V(G’)={u0},E(G’)=Ф,设该树为T1,此时G’显然是G
的某个最小生成树的子连通图。现假设第i步G’=(V’,E’)中含有i个顶点,不妨设该树为Ti,
4
5
6
{ADGB }10486015284838-1010033
{ADGBF}50485715284838-1050033
{ADGBFC }20485715284838-1050033
从表中可以看出源点A到其它各顶点的最短距离及路径为:
A→B:48路径:A→B
A→C:57路径:A→D→F→C
A→D:15路径:A→D
Ⅰ.所有顶点的度之和为偶数
Ⅱ.边数大于顶点个数减1
Ⅲ.至少有一个顶点的度为1
A.只有Ⅰ
B.只有Ⅱ
C.Ⅰ和Ⅱ
D.Ⅰ和Ⅲ
(4)假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的
所有弧的时间复杂度是(B)。
A.O(n)
B.O(e)
C.O(n+e)
D.O(n*e)
(5)已知一个有向图8.30所示,则从顶点a出发进行深度优先偏历,不可能得到的DFS
树T’的代价总和小于T的代价总和,则必在T’中存在一条边(u’,v’)∈TE’,(u’,v’)∉TE,
且(u’,v’)的代价小于(un-1,vn-1)的代价,这就说明(u’,v’)边没有选取的原因是因为u’,v’在同一个
连通分量,添加(u’,v’)将产生回路,说明T’不可能是树(添加一条边没有减少一个连通分
(1)求一个顶点的度;
(2)往图中插入一个顶点;
(3)往图中插入一条边;
(4)删去图中某顶点;
(5)删去图中某条边。
【答】:本题的参考解答基于以下的存储结构:
#define m 20/*预定义图的最大顶点数*/
typedef char datatype;/*顶点信息数据类型*/
typedef struct node{/*边表结点*/
步都是向G’中添加一个顶点同时添加一条边,始终保持G’中所有顶点连通。这样,当G’有n
个顶点时是仅有n-1条边的连通图,所以G’是一棵树。Prim算法在执行过程中,始终能保证
G’=(V’,E’)是无向连通网络G=(V,E)上某个最小代价生成树的连通图,如果该结论正
确,则随着V(G’)顶点不断增加,当V(G’)=V(G)时,G’=(V’,E’)就是G=(V,E)上的最小代价生
顶点属于不同的两个连通分量,则把该边添加到树T中,每添加一条边就减少一个连通分量。
当添加了共n-1条边时,就把n个连通分量变成一个连通分量,此时T就是具有n个顶点n-1
条边的树。由于n是有限数,E(G)中边数也是有限的,所以算法具有有穷性。
不妨设T的边为(u1,v1),(u2,v2),…,(un-1,vn-1),按权值从小到大排列,若存在一棵
(1)顶点D的入度与出度;
(2)该图的出边表与入边表;
(3)该图的强连通分量。
【答】:
(1)顶点D的入度是2;顶点D的出度为1。
(2)该图的出边表如图8.34.1所示,该图的入边表如图8.34.2所示。
77
图Hale Waihona Puke .34.1出边表(3)该图的两个强连通分量如图8.34.3所示。
AC
B
D
图8.34.2入边表
A.14 B.15 C.17 D.18
图8.32带权无向图
8.2对于如图8.33所示的无向图,试给出:
(1)图中每个顶点的度;
(2)该图的邻接矩阵;
(3)该图的邻接表与邻接多重表;
(4)该图的连通分量。
【答】:
图8.33无向图
图8.34有向图
(1)D(V0)=2;D(V1)=2;D(V2)=3;D(V3)=3;D(V4)=2;D(V5)=2;D(V6)
序列为(A)。
A.a d b e f c
B.a d c e f b
ac
C.a d c b f e
b
ef
d
D.a d e f c b
图8.30有向图
(6)无向图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)。
8.1选择题
第8章图
(1)如果某图的邻接矩阵是对角线元素均为零的上三角矩阵,则此图是(D)。
A.有向完全图B.连通图
C.强连通图
D.有向无环图
(2)若邻接表中有奇数个表结点,则一定(D)。
A.图中有奇数个顶点
C.图为无向图
B.图中有偶数个顶点
D.图为有向图
(3)下列关于无向连通图特性的叙述中,正确的是(A)。
相关文档
最新文档