数据结构课后习题答案第七章

第七章图(参考答案)

7.1(1)邻接矩阵中非零元素的个数的一半为无向图的边数;

(2)A[i][j]= =0为顶点,I 和j无边,否则j和j有边相通;

(3)任一顶点I的度是第I行非0元素的个数。

7.2(1)任一顶点间均有通路,故是强连通;

(2)简单路径V4 V3 V1 V2;

(3)

0 1 ∞ 1

∞ 0 1 ∞

1 ∞ 0 ∞

∞∞ 1 0

邻接矩阵

邻接表

(2)从顶点4开始的DFS序列:V5,V3,V4,V6,V2,V1

(3)从顶点4开始的BFS序列:V4,V5,V3,V6,V1,V2

7.4(1)①adjlisttp g; vtxptr i,j; //全程变量

② void dfs(vtxptr x)

//从顶点x开始深度优先遍历图g。在遍历中若发现顶点j,则说明顶点i和j间有路径。{ visited[x]=1; //置访问标记

if (y= =j)

{ found=1;exit(0);}//有通路,退出

else { p=g[x].firstarc;//找x的第一邻接点

while (p!=null)

{ k=p->adjvex;

if (!visited[k])dfs(k);

p=p->nextarc;//下一邻接点

}

}

③ void connect_DFS (adjlisttp g)

//基于图的深度优先遍历策略,本算法判断一邻接表为存储结构的图g种,是否存在顶点i //到顶点j的路径。设 1<=i ,j<=n,i<>j.

{ visited[1..n]=0;found=0;

scanf (&i,&j);

dfs (i);

if (found) printf (” 顶点”,i,”和顶点”,j,”有路径”);

else printf (” 顶点”,i,”和顶点”,j,”无路径”);

}// void connect_DFS

(2)宽度优先遍历

全程变量,调用函数与(1)相同,下面仅写宽度优先遍历部分。

void bfs(vtxptr x)

//

{ initqueue(q);enqueue(q,x);

while (!empty(q));

{ y=delqueue(q);

if (y= =j)

{ found=1;exit(0);}//有通路,退出

else {p=g[x].firstarc;//第一邻接点

while (p!=null)

{k=p->adjvex;

if (! Visted[k]) enqueue(q,k);

p=p->nextarc

}

}// if(y= =j)

}//while(!empty(q))

7.5。假定该有向图以邻接表存储,各顶点的邻接点按增序排列 DFS 序列:V1,V3,V6,V7,V4,V2,V5,V8 BFS 序列:V1,V3,V4,V6,V7,V2,V5,V8

DFS 森林 BFS 森林 V1 V2 V1 V2 V3

V4 V3 V4 V5 V5

V6 V7 V6 V8 V8 V7

7.6简单回路指起点和终点相同的简单路径。算法基本思想是利用图的遍历,以顶点VK 开始,若遍历中再通到VK ,则存在简单回路,否则不存在简单回路。 Adjlisttp g ; visited[1..n]=0; Int found =0;//全程变量 Int dfs(btxptr x)

//从k 顶点深度优先遍历图g ,看是否存在k 的简单回路 { visited[x]=1; p=g[x].firstarc; while(p!=null) { w=p->adjvex; if(w= =k)

{ found=1;exit(0);}//有简单回路,退出 if (!visited[k] ) dfs(w ); p=p->nextarc; }//while(p!=null) }// dfs

7

(2)

KRUSKAL 算法的最小生成树

(权值相同的边选取无顺序) 注:选定点4和5时无优先顺序,二者最短路径均为29 7.9

0 8 ∞ 1 2 0 0:1->1 A0= 3 0 ∞ path0 = 1 2 0 1:1->2

5 2 0 1 2 3 ∞:1到3没有直接通路

0 8 ∞ path1同path0,加入顶点1后无变化 A1= 3 0 ∞

5 2 0

0 8 ∞

A2= 3 0 ∞path2同path1

5 2 ∞

共七种

用TOPOSORT算法求得第七种,即V5,V6,V1,V2,V3,V4.

用邻接表存储结构,邻接点逆序即编号大的排在前面。入度为0顶点用栈结构存储,初始时从顶点1到顶点N扫描,入度为0的顶点进栈,得V5在栈顶。

7.11

void toposort_dfs (graph g;vtptr v)

//从顶点v开始,利用深度优先遍历对图g进行拓扑排序。

//基本思想是利用栈s存放顶点,首先出栈的顶点是出度为0的顶点,是拓扑序列中最后一个顶//点。若出栈元素个数等于顶点数,则拓扑排序成功,输出的是逆拓扑排序序列。

{ visited[1..n]=0;top=0;num=0;//初始化;top为栈顶指针,num记出栈元素数

s[++top]=v;//顶点入栈

while (top!=0)

{w=firstadj(g,v);//求顶点v的第一邻接点

while (w!=0) // w!=0的含义是w存在

{ if ( !visited[w]) s[++top]=w;

w=nextadj(g,v,w);//求下一个邻接点 }

if (top!=0) {v=s[top--]; num++; printf(v);}//输出顶点 }

printf(“\n”);

if (num

V10

V1 关键活动 a3,a4,a7,a11,a14

关键路径V1->V3->V4->V7->V9->V10 长22 关键活动a3,a4,a7,a11,a14

数据结构第七章图练习及答案

数据结构第七章图练习及答案 1( 拓扑排序的结果不是唯一的,试写出下图任意2个不同的拓扑序列。 2(写出求以下AOE网的关键路径的过程。要求:给出每一个事件和每一个活动的最早开始时间和最晚开始时间。 【解析】解题关键是弄清拓扑排序的步骤 (1)在AOV网中,选一个没有前驱的结点且输出;(2)删除该顶点和以它为尾的弧;(3)重复上述步骤直至全部顶点均输出或不再有无前驱的顶点。 【答案】(1)0132465 (2)0123465 【解析】求关键路径首先求关键活动,关键活动ai的求解过程如下 (1)求事件的最早发生时间ve(j), 最晚发生时间vl(j); (2)最早发生时间从ve(0)开始按拓扑排序向前递推到ve(6), 最晚发生时间从vl(6)按逆拓扑排序向后递推到 vl(0); (3)计算e(i),l(i):设ai由弧表示,持续时间记为dut,则有下式成立 e(i)=ve(j) l(i)=vl(k)-dut()

(4)找出e(i)-l(i)=0的活动既是关键活动。 【答案】 关键路径为:a0->a4->a6->a9 7.1 选择题 1(对于一个具有n个顶点和e条边的有向图,在用邻接表表示图时,拓扑排序算法时间复 杂度为( B ) A) O(n) B) O(n+e) C) O(n*n) D) O(n*n*n) 2(设无向图的顶点个数为n,则该图最多有( B )条边。 A)n-1 B)n(n-1)/2 C) n(n+1)/2 D)n2 3(连通分量指的是( B ) A) 无向图中的极小连通子图 B) 无向图中的极大连通子图 C) 有向图中的极小连通子图 D) 有向图中的极大连通子图 4(n个结点的完全有向图含有边的数目( D ) A)n*n B)n(n+1) C)n/2 D)n*(n-1) 5(关键路径是( A ) A) AOE网中从源点到汇点的最长路径

数据结构 习题 第七章 图 答案

第7章图 二.判断题 部分答案解释如下。 2. 不一定是连通图,可能有若干连通分量 11. 对称矩阵可存储上(下)三角矩阵 14.只有有向完全图的邻接矩阵是对称的 16. 邻接矩阵中元素值可以存储权值 21. 只有无向连通图才有生成树 22. 最小生成树不唯一,但最小生成树上 权值之和相等 26. 是自由树,即根结点不确定 35. 对有向无环图,拓扑排序成功;否则,图中有环,不能说算法不适合。 42. AOV网是用顶点代表活动,弧表示活动间的优先关系的有向图,叫顶点表示活动的网。 45. 能求出关键路径的AOE网一定是有向无环图 46. 只有该关键活动为各关键路径所共有,且减少它尚不能改变关键路径的前提下,才可缩 短工期。 48.按着定义,AOE网中关键路径是从“源点”到“汇点”路径长度最长的路径。自然,关 键路径上活动的时间延长多少,整个工程的时间也就随之延长多少。 三.填空题 1.有n个顶点,n-1条边的无向连通图 2.有向图的极大强连通子图 3. 生成树 9. 2(n-1) 10. N-1 11. n-1 12. n 13. N-1 14. n 15. N 16. 3 17. 2(N-1) 18. 度出度 19. 第I列非零元素个数 20.n 2e

21.(1)查找顶点的邻接点的过程 (2)O(n+e) (3)O(n+e) (4)访问顶点的顺序不同 (5)队列和栈 22. 深度优先 23.宽度优先遍历 24.队列 25.因未给出存储结构,答案不唯一。本题按邻接表存储结构,邻接点按字典序排列。 25题(1) 25题(2) 26.普里姆(prim )算法和克鲁斯卡尔(Kruskal )算法 27.克鲁斯卡尔 28.边稠密 边稀疏 29. O(eloge ) 边稀疏 30.O(n 2 ) O(eloge) 31.(1)(V i ,V j )边上的权值 都大的数 (2)1 负值 (3)为负 边 32.(1)n-1 (2)普里姆 (3)最小生成树 33.不存在环 34.递增 负值 35.160 36.O(n 2 ) 37. 50,经过中间顶点④ 38. 75 39.O(n+e ) 40.(1)活动 (2)活动间的优先关系 (3)事件 (4)活动 边上的权代表活动持续时间 41.关键路径 42.(1)某项活动以自己为先决条件 (2)荒谬 (3)死循环 43.(1)零 (2)V k 度减1,若V k 入度己减到零,则V k 顶点入栈 (3)环 44.(1)p<>nil (2)visited[v]=true (3)p=g[v].firstarc (4)p=p^.nextarc 45.(1)g[0].vexdata=v (2)g[j].firstin (3)g[j].firstin (4)g[i].firstout (5)g[i].firstout (6)p^.vexj (7)g[i].firstout (8)p:=p^.nexti (9)p<>nil (10)p^.vexj=j (11)firstadj(g,v 0) (12)not visited[w] (13)nextadj(g,v 0,w) 46.(1)0 (2)j (3)i (4)0 (5)indegree[i]==0 (6)[vex][i] (7)k==1 (8)indegree[i]==0 47.(1)p^.link:=ch[u ].head (2)ch[u ].head:=p (3)top<>0 (4)j:=top (5)top:=ch[j].count (6)t:=t^.link 48.(1)V1 V4 V3 V6 V2 V5(尽管图以邻接表为存储结构,但因没规定邻接点的排列,所以结果是不唯一的。本答案是按邻接点升序排列给出的。) (2) ① top==-1 ② top=graph[j].count ③ graph[k].count==0 四.应用题 1.(1)G1最多n(n-1)/2条边,最少n-1条边 (2) G2最多n(n-1)条边,最少n 条边 (3) G3最多n(n-1)条边,最少n-1条边 (注:弱连通有向图指把有向图看作无向图时,仍是连通的) 2.n-1,n 3.分块对称矩阵 4.证明:具有n 个顶点n-1条边的无向连通图是自由树,即没有确定根结点的树,每个结点均可当根。若边数多于n-1条,因一条边要连接两个结点,则必因加上这一条边而使两个结点多了一条通路,即形成回路。形成回路的连通图不再是树(在图论中树定义为无回路的连通图)。

《数据结构》各章课后作业答案

《数据结构》各章课后作业答案 第一章 绪论课后作业答案 1. 简述线性结构与非线性结构的不同点。 答:线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是多对多的。 2.分析下面各程序段的时间复杂度(每小题5分,共20分) 解:1.第一个for 循环执行n+1次,第二个for 循环执行n(m+1)次,A[i][j]=0;语句执行n*m 次,此程序段总的执行次数为n+1+n*(m+1)+n*m=2nm+2n+1次。故时间复杂度为O(n*m)。 2.算法的时间复杂度是由嵌套最深层语句的执行次数决定的,本程序段嵌套最深层语句为: s+=B[i][j]; 它的执行次数为n 2,所以本程序段的时间复杂度是O(n 2 )。 3. 该算法的基本操作是语句x++, 其语句频度为: 111 1n n i i j --==∑∑=10 ()n i n i -=-∑= (1) 2 n n - 所以本程序段的时间复杂度是O(n 2 )。 4.设语句执行m 次,则有 3m ≤n ⇒m ≤log 3n 所以本程序段的时间复杂度为O(log 3n)。 第二章 线性表课后作业答案 1. 填空题。 (1)在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。 (2)线性表中结点的集合是 有限 的,结点间的关系是 一对一的。 (2)s=0; for (i=0; i

数据结构第七章的习题答案

数据结构第七章的习题答案 数据结构第七章的习题答案 数据结构是计算机科学中非常重要的一门学科,它研究如何组织和管理数据以 便高效地访问和操作。第七章是数据结构课程中的一个关键章节,它涵盖了树 和二叉树这两个重要的数据结构。本文将为读者提供第七章习题的详细解答, 帮助读者更好地理解和掌握这些概念。 1. 问题:给定一个二叉树,如何判断它是否是二叉搜索树? 解答:要判断一个二叉树是否是二叉搜索树,我们可以使用中序遍历的方法。 中序遍历会按照从小到大的顺序访问二叉树中的节点。所以,如果一个二叉树 是二叉搜索树,那么它的中序遍历结果应该是一个有序的序列。 具体实现时,我们可以使用递归或者迭代的方式进行中序遍历,并将遍历的结 果保存在一个数组中。然后,我们检查这个数组是否是有序的即可判断二叉树 是否是二叉搜索树。 2. 问题:给定一个二叉树,如何找到它的最大深度? 解答:要找到一个二叉树的最大深度,我们可以使用递归的方式。对于每个节点,它的最大深度等于其左子树和右子树中的最大深度加1。递归的终止条件 是节点为空,此时深度为0。 具体实现时,我们可以定义一个递归函数,该函数接收一个节点作为参数,并 返回以该节点为根节点的子树的最大深度。在递归函数中,我们先判断节点是 否为空,如果为空则返回0;否则,我们分别计算左子树和右子树的最大深度,然后取两者中的较大值加1作为当前节点的最大深度。 3. 问题:给定一个二叉树,如何判断它是否是平衡二叉树?

解答:要判断一个二叉树是否是平衡二叉树,我们可以使用递归的方式。对于每个节点,我们分别计算其左子树和右子树的高度差,如果高度差大于1,则该二叉树不是平衡二叉树。 具体实现时,我们可以定义一个递归函数,该函数接收一个节点作为参数,并返回以该节点为根节点的子树的高度。在递归函数中,我们先判断节点是否为空,如果为空则返回0;否则,我们分别计算左子树和右子树的高度,然后取两者中的较大值加1作为当前节点的高度。最后,我们判断左子树和右子树的高度差是否大于1,如果大于1,则该二叉树不是平衡二叉树。 4. 问题:给定一个有序数组,如何将其转换为一棵平衡二叉搜索树? 解答:要将一个有序数组转换为一棵平衡二叉搜索树,我们可以使用递归的方式。由于有序数组的中间元素一定是二叉搜索树的根节点,所以我们可以先找到中间元素,然后以它为根节点,将数组分成左右两个部分。然后,分别递归地将左右两个部分的子数组转换为左子树和右子树,最后将左右子树连接到根节点上。 具体实现时,我们可以定义一个递归函数,该函数接收一个有序数组和数组的起始和结束位置作为参数,并返回以该数组为节点的平衡二叉搜索树。在递归函数中,我们首先判断起始位置是否大于结束位置,如果是,则返回空节点;否则,我们找到数组的中间位置,并以该位置的元素创建一个根节点。然后,我们递归地将左子数组和右子数组转换为左子树和右子树,最后将左右子树连接到根节点上。 通过以上习题的解答,我们可以更好地理解和掌握数据结构中树和二叉树的相关概念。希望本文对读者有所帮助,并能够在学习数据结构的过程中取得更好

数据结构第七章图练习及答案

一、选择题 1、有6个结点的有向完全图有()条弧。 A、36 B、28 C、30 D、15 2、用邻接表表示图进行广度优先遍历时,通常采用()来实现算法。 A、栈 B、队列 C、树 D、图 3、用邻接表表示图进行深度优先遍历时,通常采用()来实现算法。 A、栈 B、队列 C、树 D、图 4、任何一个无向连通图的最小生成树() A、只有一棵 B、一棵或多棵 C、一定有多棵 D、可能不存在 5、在一个图中,所有顶点的度数之和等于所有边数和的()倍。 A、1/2 B、1 C、2 D、4 6、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。 A、1/2 B、1 C、2 D、4 7、一个有n个顶点的无向图最多有()条边。 A、n B、n(n-1) C、n(n-1)/2 D、2n 8、具有5个顶点的无向完全图有()条边。 A、6 B、8 C、10 D、20 9、在一个具有n个顶点的无向图中,要连通全部顶点至少需要()条边。 A、n B、n+1 C、n-1 D、n/2 10、对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是() A、(n+1)*(n-1) B、(n-1)*(n-1) C、n D、n*n 11、对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为(),所有邻接表中的结点总数是() (1)A、n B、n+1 C、n-1 D、n+e (2)A、e/2 B、e C、2e D、n+e 12、采用邻接表存储的图的深度优先遍历算法类似于二叉树的() A、先序遍历 B、中序遍历 C、后序遍历 D、按层遍历 13、采用邻接表存储的图的广度优先遍历算法类似于二叉树的() A、先序遍历 B、中序遍历 C、后序遍历 D、按层遍历 14、判定一个有向图是否存在回路,除了利用拓扑排序方法外,还可以利用() A、求关键路径的方法 B、求最短路径的方法 C、宽度优先遍历算法 D、深度优先遍历算法 15、关键路径是AOE网中的() A、从源点到汇点的最长路径 B、从源点到汇点的最短路径 C、最短的回路 D、活动的最早开始时间与最迟发生时间相等 二、填空题 1、有向图G用邻接矩阵存储,则其第i行的所有元素之和等于顶点i的(出度)。 2、设有一稀疏图G,则G采用(邻接表)存储较省空间。 3、设有一稠密图G,则G采用(邻接矩阵)存储较省空间。 4、图的邻接表存储结构只适用于()图。 5、已知一个图的邻接矩阵表示,删除所有从第i个顶点出发的边的方法是(访问矩阵第I 行)。 6、图的深度优先遍历序列(不是)唯一的。 7、n个顶点e条边的图,若用邻接表存储,深度优先遍历算法的时间复杂度为(n+e)。

数据结构课后习题第七章

一、选择题 1.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,则T中的叶结点的个数为()。 A.5 B.6 C.7 D.8 2. 设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数为()。 A.M1 B.M1+M2 C.M3 D.M2+M3 3.将一棵树T转换为孩子—兄弟链表表示的二叉树H,则T的后跟序遍历是H的()。 A.前序遍历 B.中序遍历 C.后序遍历 4. 设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端顶点,则B中右指针域为空的结点有()。 A.n-1 B.n C.n+1 D.n+2 5.如果2T是由有序树T转换而来的二叉树,那么T中结点的后序遍历序列就是 T的()遍历序列。 2 A.先序 B.中序 C.后序 D.层次序 6. 在一颗度为4的树T 中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T中叶结点的个数是()。 A.41 B.42 C.82 D.122 二、判断题 1.树形结构中元素之间存在一对多个的关系.()。 2.将一棵树转成二叉树,根结点没有左子树()。 3.树与二叉树是两种不同的树形结构。() 4.对树定义中序遍历和对森林定义后序遍历都无意义()。 5.由树的先序遍历序列和后序遍历序列可以唯一确定该树()。 三、填空题 1.树在计算机内的表示方式有(),(),()。 2.已知一棵树度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有()个叶子结点。 3.每一棵树都能唯一的转换为它所对应的二叉树。若已知一颗二叉树的前序遍历序列是BEFCGDH,中序遍历序列是FEBGCHD,则它的后序遍历序列是()。设上述二叉树是由某棵树转换而成,则该树的先序遍历序列是()。 4. 先序遍历森林正好等同于按()遍历对应的二叉树,后序遍历森林正好等同于按()遍历对应的二叉树。

数据结构(C语言版清华大学出版社)课后6-7章答案

第六章树和二叉树 选择题 1.B 2.D 3.C 4.D 5.B 6.B 7.D 8.D 9.B 10.C 填空题 1.99 2.双亲表示法、孩子表示法、孩子兄弟表示法 3. 3. N2+1 4.121 5.[1og(2k-1)]+1 [logk]+2 6. 5 7.DGEBFCA 8.2^(k-1) 2^k-1 9.10 5 10.n+1 应用题 9. 先序遍历ABCDEFGH 12. 参见6.2节中的应用题第10题 算法设计题 3. 分析:利用节点在向量中存储的位置相对关系设计先序遍历算法。完全二叉树的顺序存储结构的特点是,i位置上的节点的左孩子的位置在2i,右孩子的位置在2i+1. 另外,算法利用栈实现非递归算法。 Void PreOrder_QBTree( QBTree T ){ PseqStack S; int i=1; S = Init_SwqStack(); /* 栈初始化*/ while( i<=T.n || ! Empty_SeqStack(S) ){ if( i<=T.n ){ printf("%d ",T.data[i]); Push_SeqStack(S,i); /* 保留i在栈区中*/ i = 2*i; /* 取左孩子*/ }else{ /* 左子树为空,得到右子树*/ Pop_SeqStack(S,&i); i = 2*i+1; /* 取右孩子*/ } }

6. 分析:利用二叉树的遍历算法进行改进。根据二叉树的结构特点,将二叉树根节点的左右指针互换,同时分别递归地对左子树和右子树进行同样的操作。 算法描述如下: void Exchange( BTree T ){ Bnode *p; if( T ){ p = T->lchild; /* 交换左右孩子*/ T->lchild = T->rchild; T->rchild = p; /* 递归的对左子树和右子树进行同样的操作*/ Exchange( T->lchild ); Exchange( T->rchild ); } } 第七章图 选择题1.D 2.A 3.C 4.D 5.D 6.AD 7.BC 8.AB 9.D 10.B 填空题 1.O(eloge) 稀疏图 2.队列 3. e 2e 4.求邻接矩阵第i列中非零元素个数 5.n 6.2(n-1) 7.N 8.有向图中有无回路 9.Prim 10.活动活动之间的优先关系事件活动 应用题 有向图G如下所示 顶点a的入度为2,出度为1 顶点c的入度为1,出度为1 顶点d的入度为1,出度为1 顶点e的入度为1,出度为2

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

1 填空题 (1)数据元素(2)数据项数据元素(3)集合线性结构树结构图结构(4)顺序存储链接存储数据元素数据元素之间的关系 (5)零或多个输入一个或多个输出有穷性确定性可行性 (6)自然语言程序设计语言流程图伪代码,伪代码 (7)问题规模(8)O(1) O(nlog2n) 2 选择题 (1)C D (2)B (3) B (4) A (5) D (6)A (7) C (8) C E 3 判断题 ×××√× 第二章 1 填空题 (1)表长一半表长位置 (2)108 (3)p->next=(p->next)->next; (4)运算方便 (5)p->next=head; (6)s->next=rear->next rear->next=s; rear=s; q=rear->next->next; rear->next->next=q->next; delete q; (7)O(1) O(n) (8)循环单链表循环双链表双链表 2 选择题 (1) A B (2) D (3) B (4) A (5) A (6) D (7) B (8) B (9) C (10)B (11)B (12)D (13)A (14)A 3 判断题×××××

1 填空题 (1)1003H (2)顺序栈和链栈top=-1或top==NULL top==数组长度或内存无可用空间(3)栈 (4)abc+*d- (5)后进先出先进先出操作位置受限 (6)假溢出 (7)(rear-front+n)% n (8)O(1) O(n) 2 选择题 (1) C (2) D (3) C (4) B (5) B (6) B (7) D (8) A (9) C 3 判断题×√√××第四章 1 填空题 (1)数据元素的类型是字符 (2)长度相等且对应位置字符相等(3)存取修改顺序存储(4)1140 (5)d+41 (6)三元组顺序表十字链表 2 选择题 (1) B (2) D E K (3) B (4) C (5) D (6) C (7) D 3 判断题×√√××

数据结构第七章参考答案

习题7 1.填空题 (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)设所有元素的个数为n,显然有s=n*(n+1)/(2n),则 n=2s-1 设折半查找树高度为k,则前k-1层是满二叉树,最后一层的节点数为 n-(2k-1 -1) 因此,总比较次数 nb=20*1+21*2+22*3+…+2k-2*(k-1)+(n-(2k-1 -1))*k, 而 20*1+21*2+22*3+…+2k-2*(k-1)=2k-1*k-2k+1 因此 nb=2k-1*k-2k+1+(n-(2k-1-1))*k=(n+1)k-2k+1 又k=[log2n]+1,n=2s-1,所以有 (2s-1)b=2s([log2(2s-1)]+1)-2[log2(2s-1)]+1+1 (2)查找不成功,对于顺序查找有:s=n。对于折半查找,找不到的情况有n+1种,查找

数据结构习题参考答案

数据结构习题参考答案 第一章答案 一、填空题 1.数据元素,数据项 2. O(1),O(n),O(log 2n),O(n 2) 3.线性结构,非线性结构,顺序结构,链式结构 4.无,一,无,一 5.前驱,一,无,任意 6.任意 7. O(n 1/2) 8.O(1)

从而简化插入和删除等操作的某些细节。 9.前驱,后继 10.O(n) 二、填空题 1. (1) 2. (1) 3. (4) 4. (2) 5. (2) 6. (4) 7. (4) 8. (1) 9. (4) 10.(1) 11.(2) 12.(3) 第三章参考答案 一、填空题 1.线性,任何,栈顶,队尾,队头 2.先进后出(FILO ),队尾,队头,先进先出(FIFO ) 3. top==0,top==m 4. 23541 5.前一个位置,所在位置,m-1 分析:在顺序循环队列中约定头指针front 和尾指针rear 所指向的位置,是牺牲掉一个存储单元而方便表示队列空和队列满的条件,因此顺序循环队列中实际可用的存储单元只有m-1个。 6. (rear+1)%m==front ,rear==front 7. O(1) 8.返回地址,返回地址 二、选择题

吉林省专升本数据结构习题及答案——第七章

吉林省专升本考试数据结构分章习题及参考答案———选择题 (第七章) 1、用n个键值构造一棵二叉排序树,其最低高度为() A、n/2 B、n C、log2n向下取整 D、log2n+1 向下取整 2、采用拉链法解决冲突的散列表中,查找的平均查找长度() A、直接与关键字个数有关 B、直接与装填因子a有关 C、直接与表的容量有关 D、直接与散列函数有关 3、二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法( )。 A、正确 B、错误 C、 D、 4、有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为( )。 A、35/12 B、37/12 C、39/12 D、43/12 5、折半查找有序表{4,6,10,12,20,30,50,70,88,100}。若查找表中元素58,则它将依次与表中() 比较大小,查找结果是失败。 A、20,70,30,50 B、30,88,70,50 C、20,50 D、30,88,50 6、对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A、 N+1 B、 N C、 (N+1)/2 D、 N/2 7、对线性表进行二分查找时,要求线性表必须( )。 A、以顺序方式存储 B、以链接方式存储 C、以顺序方式存储,且结点按关键字有序排序 D、以链接方式存储,且结点按关键字有序排序 8、若采用链地址法构造散列表,散列函数为H(key)=keyMOD17,则需(①)个链表。这些链的链首指针构成一个指针数组,数组的下标范围为(②) ①A.17 B.13 C.16 D.任意

数据结构习题第七章图

第七章图 一、选择题 1.图中有关路径的定义是()。【北方交通大学 2001 一、24 (2分)】 A.由顶点和相邻顶点序偶构成的边所形成的序列 B.由不同顶点所形成的序列 C.由不同边所形成的序列 D.上述定义都不是 2.设无向图的顶点个数为n,则该图最多有()条边。 A.n-1 B.n(n-1)/2 C. n(n+1)/2 D.0 E.n2 【清华大学 1998 一、5 (2分)】【西安电子科技大 1998 一、6 (2分)】 【北京航空航天大学 1999 一、7 (2分)】 3.一个n个顶点的连通无向图,其边的个数至少为()。【浙江大学 1999 四、4 (4分)】A.n-1 B.n C.n+1 D.nlogn; 4.要连通具有n个顶点的有向图,至少需要()条边。【北京航空航天大学 2000 一、6(2分)】A.n-l B.n C.n+l D.2n 5.n个结点的完全有向图含有边的数目()。【中山大学 1998 二、9 (2分)】 A.n*n B.n(n+1) C.n/2 D.n*(n-l) 6.一个有n个结点的图,最少有(B)个连通分量,最多有()个连通分量。 A.0 B.1 C.n-1 D.n 【北京邮电大学 2000 二、5 (20/8分)】 7.在一个无向图中,所有顶点的度数之和等于所有边数()倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的()倍。【哈尔滨工业大学 2001 二、3 (2分)】 A.1/2 B.2 C.1 D.4 8.用有向无环图描述表达式(A+B)*((A+B)/A),至少需要顶点的数目为( )。【中山大学1999一、14】A.5 B.6 C.8 D.9 9.下列哪一种图的邻接矩阵是对称矩阵?()【北方交通大学 2001 一、11 (2分)】A.有向图 B.无向图 C.AOV网 D.AOE网 10. 下列说法不正确的是()。【青岛大学 2002 二、9 (2分)】 A.图的遍历是从给定的源点出发每一个顶点仅被访问一次 C.图的深度遍历不适用于有向图 B.遍历的基本算法有两种:深度遍历和广度遍历 D.图的深度遍历是一个递归过程11.无向图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)},对该图进行深度优先遍历,得到的顶点序列正确的是()。【南京理工大学 2001 一、14 (1.5分)】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 12. 在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为( )。 A. O(n) B. O(n+e) C. O(n2) D. O(n3) 13. 下面是求连通网的最小生成树的prim算法:集合VT,ET分别放顶点和边,初始为( 1 ),下面步骤重复n-1次: a:( 2 );b:( 3 );最后:( 4 )。【南京理工大学 1997 一、11_14 (8分)】(1).A.VT,ET为空 B.VT为所有顶点,ET为空 C.VT为网中任意一点,ET为空 D.VT为空,ET为网中所有边 (2).A. 选i属于VT,j不属于VT,且(i,j)上的权最小 B.选i属于VT,j不属于VT,且(i,j)上的权最大 C.选i不属于VT,j不属于VT,且(i,j)上的权最小 D.选i不属于VT,j不属于VT,且(i,j)上的权最大 (3).A.顶点i加入VT,(i,j)加入ET B. 顶点j加入VT,(i,j)加入ET C. 顶点j加入VT,(i,j)从ET中删去 D.顶点i,j加入VT,(i,j)加入ET (4).A.ET 中为最小生成树 B.不在ET中的边构成最小生成树 C.ET中有n-1条边时为生成树,否则无解 D.ET中无回路时,为生成树,否则无解 14.已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={,,,,,,,,},G的拓扑序列是()。 A.V1,V3,V4,V6,V2,V5,V7 B.V1,V3,V2,V6,V4,V5,V7 C.V1,V3,V4,V5,V2,V6,V7 D.V1,V2,V5,V3,V4,V6,V7

数据结构第七章课后习题答案

7_1 对于图题7.1(P235)的无向图,给出: (1)表示该图的邻接矩阵。 (2)表示该图的邻接表。 (3)图中每个顶点的度。 解: (1)邻接矩阵: 0111000 1001100 1001010 1110111 0101001 0011001 0001110 (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开始进行深度优先搜索。

数据结构第七章习题课

1、判定一个有向图是否存在回路,除了利用拓扑排序方法外,还可以利用( ) A 、求关键路径的方法 B 、求最短路径的Dijkstra 方法 C 、宽度优先遍历算法 D 、深度优先遍历算法 2. 图中有关路径的定义是( )o A. 由顶点和相邻顶点序偶构成的边所形成的序列 B. 由不同顶点所形成的序列 C. 由不同边所形成的序列 D. 上述定义都不是 3. 一个n 个顶点的连通无向图,其边的个数至少为( ) 4. 当一个有N 个顶点的无向图用邻接矩阵 A 表示时,顶点Vi 的度是() 5. 下列说法不正确的是( )o A. 图的遍历是从给定的源点出发每一个顶点仅被访问一次 B. 遍历的基本算法有两种:深度遍历和广度遍历 C. 图的深度遍历不适用于有向图 D. 图的深度遍历是一个递归过程 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)},对该图进行深度优先遍历,得到的顶点序 列正确的是( )o 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. 设图如右所示,在下面的5个序列中,符合深度优先遍历的序列有多少?( a e d f c b a e f d c b C . 3个 &在图采用邻接表存储时,求最小生成树的 A. O (n ) B O (n+e ) 9.已知有向图 G=(V,E),其中 V={V 1,V 2,V 3,V 4,V 5,V 6,V 7}, E={VV 1,V 2>,VV 1,V 3>,VV 1,V 4>,VV 2,V 5>,VV 3,V 5>,VV 3,V 6>,VV 4,V 6>,VV 5,V 7>,VV 6,V 7>}, A . n-1 B . n C . n+1 D . nlogn ; n Z A[i, j] A. i 4 n Z A 【,j] B. 订 n Z A[j,i] C . V n n S A[i, j]迟 Aj,i] D. v + v Prim 算法的时间复杂度为( 2 3 C. O (n ) D. O (n ) )o a e b d f c B . 4个

实用数据结构基础(第四版)课后习题

一、判断题 (第一章绪论) 1.数据元素是数据的最小单元。 答案:错误 2.一个数据结构是由一个逻辑结构和这个逻辑结构上的基本运算集构成的整体。 答案:错误 3.数据的存储结构是数据元素之间的逻辑关系和逻辑结构在计算机存储器内的映像。 答案:正确 4.数据的逻辑结构是描述元素之间的逻辑关系,它是依赖于计算机的。 答案:错误 5.用语句频度来表示算法的时间复杂度的最大好处是可以独立于计算机的软硬件,分析算法的时间 答案:正确 (第二章线性表) 6.取顺序存储线性表的第i个元素的时间同i的大小有关。 答案:错误 7.线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。 答案:正确 8.线性链表的每一个节点都恰好包含一个指针域。 答案:错误 9.顺序存储方式的优点的存储密度大,插入和删除效率不如练市存储方式好。 答案:正确 10.插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。答案:错误 (第三章栈)

11.栈是一种对进栈和出栈作了限制的线性表。 答案:错误 12.在C(或C++)语言中设顺序栈的长度为MAXLEN,则top=MAXLEN表示栈满。答案:错误 13.链栈与顺序栈相比,其特点之一是通常不会出现满栈的情况。 答案:正确 14.空栈就是所有元素都为0上的栈。 答案:错误 15.将十进制数转换为二进制数是栈的典型应用之一。 答案:正确 (第四章队列) 16.队列式限制在两端进行操作的线性表。 答案:正确 17.判断顺序队列为空的标准是头指针和尾指针都指向同一结点。 答案:错误 18.在循环链列队中无溢出现像。 答案:错误 19.在循环队列中,若尾指针rear大于头指针front,则元素个数为rear-front。 答案:正确 20.顺序队列和循环队列关于队满和队空的判断条件是一样的。 答案:错误 (第五章串) 21.串是n个字母的有限序列。 答案:错误 22.串的堆分配存储是一种动态存储结构。

数据结构作业系统_第七章答案

数据结构作业系统_第 七章答案 本页仅作为文档封面,使用时可以删除 This document is for reference only-rar21year.March

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 { VertexType 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)

严蔚敏《数据结构(c语言版)习题集》答案第七章 图

严蔚敏《数据结构(c语言版)习题集》答案第七章图第七章图 7.14 Status Build_AdjList(ALGraph &G)//输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表 { InitALGraph(G); scanf("%d",&v); if(v<0) return ERROR; //顶点数不能为负 G.vexnum=v; scanf("%d",&a); if(a<0) return ERROR; //边数不能为负 G.arcnum=a; for(m=0;m

{ for(q=G.vertices[i].firstarc;q->nextarc;q=q->nextarc); q->nextarc=p; } p->adjvex=j;p->nextarc=NULL; }//while return OK; }//Build_AdjList 7.15 //本题中的图G均为有向无权图,其余情况容易由此写出 Status Insert_Vex(MGraph &G, char v)//在邻接矩阵表示的图G上插入顶点v { if(G.vexnum+1)>MAX_VERTEX_NUM return INFEASIBLE; G.vexs[++G.vexnum]=v; return OK; }//Insert_Vex Status Insert_Arc(MGraph &G,char v,char w)//在邻接矩阵表示的图G上插入边(v,w) { if((i=LocateVex(G,v))<0) return ERROR; if((j=LocateVex(G,w))<0) return ERROR; if(i==j) return ERROR; if(!G.arcs[i][j].adj) { G.arcs[i][j].adj=1;

相关主题
相关文档
最新文档