《数据结构及其应用》笔记含答案 第六章_图
数据结构与算法第6章图答案
第 6 章图课后习题讲解1. 填空题⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。
【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。
⑵任何连通图的连通分量只有一个,即是()。
【解答】其自身⑶图的存储结构主要有两种,分别是()和()。
【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。
⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。
【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。
⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。
【解答】求第j列的所有元素之和⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。
【解答】出度⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。
【解答】前序,栈,层序,队列⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。
【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。
⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。
【解答】回路⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。
【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。
北邮数据结构第六章答案详解 图(1)
1
5
1
54 3
42
5 66
图 6-8 图 G 答案:根据不同算法构造的最小生成树如图 6-9 所示的图(a)和(b)
2
④
⑤ 5
1
①
4 3
②
③
6
2
⑤
③ 5
1
①
4 3
④
②
6
(a) Prim 生成树
(b) Kruskal 生成树
图 6-9 最小生成树
5、算法设计
(1)以邻接表为存储结构,设计实现深度优先遍历的非递归算法。
int top = -1; cout<<v<<’\t’; bVisited[v] = true; stack[++top] = v;
//访问结点 v //设置访问标记 //结点 v 入栈
while (top!=-1)
{
v=stack[top];
ArcNode<T> *p = adjlist[v]. firstarc; ①
)
A.1
B. n/2
C.n-1
D.n
解析:若超过 n-1,则路径中必存在重复的顶点
答案:C
(5) 若一个图中包含有 k 个连通分量,若按照深度优先搜索的方法访问所有顶点,则必
须调用(
)次深度优先搜索遍历的算法。
A.k
B.1
C.k-1
D.k+1
解析:一次深度优先搜索可以访问一个连通分量中的所有结点,因此 k 个连通分量需要 调用 k 次深度优先遍历算法。
④
} if (p==NULL) top--;
⑤//若是找不到未访问的结点,出栈
数据结构第六章习题答案
删除40 删除70 删除60struct node { int data;struct node *lchild, *rchild;};typedef struct node NODE;NODE *create_tree(a,i,j)int a[ ],i,j;{NODE *p;int k;if(i>j) return(NULL);k=(i+j)/2;p=(NODE *)malloc(sizeof(NODE));p->data=a[k];p->lchild=create_tree(a,i,k-1);p->rchild=create_tree(a,k+1,j);return(p);}6. 3int check(root)NODE *root;{int x;if(root==NULL)return(0);if(root->data<root->rchild->data&&root->data>root->lchild->data) {x=check(root->rchild);if(!x) return(check(root->lchild));}return(1);}6. 4int height(root)NODE *root;{int h,k;if(root==NULL)return(-1);else if(root->lchild==NULL&&root->rchild==NULL)return(0);elseh=height(root->lchild);k=height(root->rchild);if(h>k)return(h+1);elsereturn(k+1);}}6. 5#include “math.h”int check_beltree(root)NODE *root;{int a;if(root==NULL)return(1);if(check_beltree(root->lchild)==0||check_beltree(root->rchild)==0) return(0);a=abs(height(root->rchild)-height(root->lchild)); //上题函数if(a<=1)return(1);}6.76.8结点k1 k2 k3 k4 k5结点值10 30 50 70 90相对使用频率(pi)p1 p2 p3 p4 p55 6 3 7 4外部结点使用频率(qi) q0 q1 q2 q3 q4 q54 2 1 2 3 4 本题的分析与计算,请参考“习题6.8”(Excel表),最后结果为:。
数据结构、算法与应用习题参考答案
第1章概论1.数据、数据元素、数据结构、数据类型的含义分别是什么数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
数据元素:数据的基本单位,在计算机程序中通常作为一个整体考虑。
数据结构:数据元素之间的关系+运算,是以数据为成员的结构,是带结构的数据元素的集合,数据元素之间存在着一种或多种特定的关系。
数据类型:数据类型是用来区分不同的数据;由于数据在存储时所需要的容量各不相同,不同的数据就必须要分配不同大小的内存空间来存储,所有就要将数据划分成不同的数据类型。
数据类型包含取值范围和基本运算等概念。
2.什么是数据的逻辑结构什么是数据的物理结构数据的逻辑结构与物理结构的区别和联系是什么逻辑结构:数据的逻辑结构定义了数据结构中数据元素之间的相互逻辑关系。
数据的逻辑结构包含下面两个方面的信息:①数据元素的信息;②各数据元素之间的关系。
物理结构:也叫储存结构,是指逻辑结构的存储表示,即数据的逻辑结构在计算机存储空间中的存放形式,包括结点的数据和结点间关系的存储表示。
数据的逻辑结构和存储结构是密不可分的,一个操作算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采与的存储结构。
采用不同的存储结构,其数据处理的效率是不同的。
因此,在进行数据处理时,针对不同问题,选择合理的逻辑结构和存储结构非常重要。
3.数据结构的主要操作包括哪些对于各种数据结构而言,他们在基本操作上是相似的,最常用的操作有:创建:建立一个数据结构;清除:清除一个数据结构;插入:在数据结构中增加新的结点;删除:把指定的结点从数据结构中删除;访问:对数据结构中的结点进行访问;更新:改变指定结点的值或改变指定的某些结点之间的关系;查找:在数据结构中查找满足一定条件的结点;排序:对数据结构中各个结点按指定数据项的值,以升序或降序重新排列。
4.什么是抽象数据类型如何定义抽象数据类型抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。
数据结构答案第6章
数据结构答案第6章第6章数据结构答案1. 栈的应用栈是一种常见的数据结构,其特点是先进后出。
下面是一些关于栈的应用场景。
1.1 函数调用栈在程序中,每当一个函数被调用时,相关的变量和状态信息会被存储在一个称为函数调用栈的栈中。
1.2 表达式求值栈也常用于表达式求值,特别是中缀表达式转后缀表达式的过程中。
通过使用栈,我们可以很方便地进行算术运算。
1.3 逆序输出如果我们需要逆序输出一段文本、字符串或者其他数据,可以使用栈来实现。
将数据依次压入栈中,然后再逐个弹出即可。
2. 队列的实现与应用队列是另一种常见的数据结构,其特点是先进先出。
下面是一些关于队列的实现和应用。
2.1 数组实现队列队列可以使用数组来实现。
我们可以使用两个指针分别指向队列的前端和后端,通过移动指针来实现入队和出队的操作。
2.2 链表实现队列队列还可以使用链表来实现。
我们可以使用一个指针指向队列的头部,并在尾部添加新元素。
通过移动指针来实现出队操作。
2.3 广度优先搜索(BFS)队列常用于广度优先搜索算法。
在BFS中,我们需要按照层级来访问节点。
使用队列可以帮助我们按照顺序存储和访问节点。
3. 树的遍历和应用树是一种非常重要的数据结构,在计算机科学中应用广泛。
下面是一些关于树的遍历和应用的介绍。
3.1 深度优先搜索(DFS)深度优先搜索是树的一种遍历方式。
通过递归或者使用栈的方式,可以按照深度优先的顺序遍历树的所有节点。
3.2 广度优先搜索(BFS)广度优先搜索也可以用于树的遍历。
通过使用队列来保存要访问的节点,可以按照层级的顺序遍历树。
3.3 二叉搜索树二叉搜索树是一种特殊的二叉树,它的每个节点的值都大于左子树中的值,小于右子树中的值。
这种结构可以用于高效地进行数据查找。
4. 图的表示与遍历图是由节点和边组成的一种数据结构。
下面是一些关于图的表示和遍历的说明。
4.1 邻接矩阵表示法邻接矩阵是一种常见的图的表示方法。
使用一个二维数组来表示节点之间的连接关系。
【免费下载】数据结构 第6章习题答案
4 5 3 (3)
(注:合并值应排在叶子值之后)
1
2
(注:原题为选择题:A.32
B.33
C.34
D.15)
三、单项选择题(每小题 1 分,共 11 分)
( C )1. 不含任何结点的空树
。
(A)是一棵树;
(B)是一棵二叉树;
(C)是一棵树也是一棵二叉树;
(D)既不是树也不是二叉树
答:以前的标答是 B,因为那时树的定义是 n≥1
空指针。 (正确。用二叉链表存储包含 n 个结点的二叉树,结点共有 2n 个链域。由于二叉树中,除根结点外,每 一个结点有且仅有一个双亲,所以只有 n-1 个结点的链域存放指向非空子女结点的指针,还有 n+1 个空指 针。)即有后继链接的指针仅 n-1 个。 ( √ )10. 〖01 年考研题〗具有 12 个结点的完全二叉树有 5 个度为 2 的结点。
,而 N 的右子女是它在原树里对应结点的 D 。
供选择的答案
A: ①是特殊的树 ②不是树的特殊形式 ③是两棵树的总称 ④有是只有二个根结点的树形结构
B: ①左子结点 ② 右子结点 ③ 左子结点或者没有右子结点 ④ 兄弟
C~D: ①最左子结点
② 最右子结点 ③ 最邻近的右兄弟
④ 最邻近的左兄弟
⑤ 最左的兄弟 ⑥ 最右的兄弟
答案:A=
B=
C=
D=
答案:ABCDE=2,1,1,3
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配,料置不试技仅卷术可要是以求指解,机决对组吊电在顶气进层设行配备继置进电不行保规空护范载高与中带资负料荷试下卷高总问中体题资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,.卷编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试5写交卷、重底保电要。护气设管装设备线置备4高敷动调、中设作试电资技,高气料术并中课3试中且资件、卷包拒料中管试含绝试调路验线动卷试敷方槽作技设案、,术技以管来术及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
数据结构第六章图理解练习知识题及答案解析详细解析(精华版)
图1. 填空题⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。
【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。
⑵任何连通图的连通分量只有一个,即是()。
【解答】其自身⑶图的存储结构主要有两种,分别是()和()。
【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。
⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。
【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。
⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。
【解答】求第j列的所有元素之和⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。
【解答】出度⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。
【解答】前序,栈,层序,队列⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。
【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。
⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。
【解答】回路⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。
【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。
数据结构与算法第六章课后答案第六章 树和二叉树
第6章 树和二叉树(参考答案)6.1(1)根结点a6.2三个结点的树的形态: 三个结点的二叉树的形态:(1) (1) (2) (4) (5)6.3 设树的结点数是n ,则n=n0+n1+n2+……+nm+ (1)设树的分支数为B ,有n=B+1n=1n1+2n2+……+mnm+1 (2)由(1)和(2)有:n0=n2+2n3+……+(m-1)nm+16.4(1) k i-1 (i 为层数)(2) (n-2)/k+1(3) (n-1)*k+i+1(4) (n-1)%k !=0; 其右兄弟的编号 n+16.5(1)顺序存储结构注:#为空结点6.6(1) 前序 ABDGCEFH(2) 中序 DGBAECHF(3) 后序 GDBEHFCA6.7(1) 空二叉树或任何结点均无左子树的非空二叉树(2) 空二叉树或任何结点均无右子树的非空二叉树(3) 空二叉树或只有根结点的二叉树6.8int height(bitree bt)// bt是以二叉链表为存储结构的二叉树,本算法求二叉树bt的高度{ int bl,br; // 局部变量,分别表示二叉树左、右子树的高度if (bt==null) return(0);else { bl=height(bt->lchild);br=height(bt->rchild);return(bl>br? bl+1: br+1); // 左右子树高度的大者加1(根) }}// 算法结束6.9void preorder(cbt[],int n,int i);// cbt是以完全二叉树形式存储的n个结点的二叉树,i是数// 组下标,初始调用时为1。
本算法以非递归形式前序遍历该二叉树{ int i=1,s[],top=0; // s是栈,栈中元素是二叉树结点在cbt中的序号 // top是栈顶指针,栈空时top=0if (n<=0) { printf(“输入错误”);exit(0);}while (i<=n ||top>0){ while(i<=n){visit(cbt[i]); // 访问根结点if (2*i+1<=n) s[++top]=2*i+1; //若右子树非空,其编号进栈i=2*i;// 先序访问左子树}if (top>0) i=s[top--]; // 退栈,先序访问右子树} // END OF while (i<=n ||top>0)}// 算法结束//以下是非完全二叉树顺序存储时的递归遍历算法,“虚结点”用‘*’表示void preorder(bt[],int n,int i);// bt是以完全二叉树形式存储的一维数组,n是数组元素个数。
数据结构课后习题答案第六章
第六章树和二叉树(下载后用阅读版式视图或web版式可以看清)习题一、选择题1.有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。
表示该遗传关系最适合的数据结构为( )。
A.向量B.树C图 D.二叉树2.树最合适用来表示( )。
A.有序数据元素 B元素之间具有分支层次关系的数据C无序数据元素 D.元素之间无联系的数据3.树B的层号表示为la,2b,3d,3e,2c,对应于下面选择的( )。
A. la (2b (3d,3e),2c)B. a(b(D,e),c)C. a(b(d,e),c)D. a(b,d(e),c)4.高度为h的完全二叉树至少有( )个结点,至多有( )个结点。
A. 2h_lB.h C.2h-1 D. 2h5.在一棵完全二叉树中,若编号为f的结点存在右孩子,则右子结点的编号为( )。
A. 2iB. 2i-lC. 2i+lD. 2i+26.一棵二叉树的广义表表示为a(b(c),d(e(,g(h)),f)),则该二叉树的高度为( )。
A.3B.4C.5D.67.深度为5的二叉树至多有( )个结点。
A. 31B. 32C. 16D. 108.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。
A. 15B. 16C. 17D. 479.题图6-1中,( )是完全二叉树,( )是满二叉树。
10.在题图6-2所示的二叉树中:(1)A结点是A.叶结点 B根结点但不是分支结点C根结点也是分支结点 D.分支结点但不是根结点(2)J结点是A.叶结点 B.根结点但不是分支结点C根结点也是分支结点 D.分支结点但不是根结点(3)F结点的兄弟结点是A.EB.D C.空 D.I(4)F结点的双亲结点是A.AB.BC.CD.D(5)树的深度为A.1B.2C.3D.4(6)B结点的深度为A.1B.2C.3D.4(7)A结点所在的层是A.1B.2C.3D.411.在一棵具有35个结点的完全二叉树中,该树的深度为( )。
数据结构课后习题答案第六章
所以
n=n1+2×n2+…+m×nm+1 由(1)(2)可知 n0= n2+2×n3+3×n4+…+(m-1) ×nm+1
(2)
八、证明:一棵满 K 叉树上的叶子结点数 n0 和非叶子结点数 n1 之间满足以下关 系:n0=(k-1)n1+1。 证明:n=n0+n1
n=n1k+1 由上述式子可以推出 n0=(k-1)n1+1 十五、请对右图所示的二叉树进行后序线索化,为每个空指针建立相应的前驱或 后继线索。
四十三、编写一递归算法,将二叉树中的所有结点的左、右子树相互交换。 【分析】 依题意,设 t 为一棵用二叉链表存储的二叉树,则交换各结点的左右子树的
运算基于后序遍历实现:交换左子树上各结点的左右子树;交换右子树上各结点 的左右子树;再交换根结点的左右子树。
【算法】 void Exchg(BiTree *t){ BinNode *p; if (t){ Exchg(&((*t)->lchild)); Exchg(&((*t)->rchild)); P=(*t)->lchild; (*t)->lchild=(*t)->rchild; (*t)->rchild=p; } }
(4)编号为 i 的结点的有右兄弟的条件是什么? 其右兄弟的编号是多少? 解:
(1) 层号为 h 的结点数目为 kh-1 (2) 编号为 i 的结点的双亲结点的编号是:|_ (i-2)/k _|+1(不大于(i-2)/k 的最大整数。也就是(i-2)与 k 整除的结果.以下/表示整除。 (3) 编号为 i 的结点的第 j 个孩子结点编号是:k*(i-1)+1+j; (4) 编号为 i 的结点有右兄弟的条件是(i-1)能被 k 整除
数据结构_第六章_图_练习题与答案详细解析(精华版)
图1. 填空题⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。
【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。
⑵ 任何连通图的连通分量只有一个,即是()。
【解答】其自身⑶ 图的存储结构主要有两种,分别是()和()。
【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。
⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。
【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。
⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。
【解答】求第j列的所有元素之和⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。
【解答】出度⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。
【解答】前序,栈,层序,队列⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。
【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。
⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。
【解答】回路⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。
【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。
《数据结构与实训(第4版)(微课版)》 -第6章习题参考答案[5页]
第六章习题答案1.填空题(1) e=21∑=n i i v D 1)( (2) 21n(n – 1) (3)入度(4)先序 层次(5) n-1(6)O(n 2) O(elog 2e) kruskal(7)4(8)边的数目(9)n 2-e(10)n+12.判断题(1)×(2)√(3)√(4)×(5)√(6)√(7)×(8)×(9)√(10)×3.简答题(1)①②邻接矩阵:邻接表:③TD(V1)=2 TD(V2)=3 TD(V3)=2 TD(V4)=3 TD(V5)=2(2)邻接矩阵为:邻接表为:(3②若邻接矩阵A中的元素A[i][j]的值为非零,则顶点V i和V j之间有边相连③对于任意一个顶点i,它的度为邻接矩阵第i行(或第i列)的非零(或非∞)元素数目。
(4)题中无向图改为有向图。
①边(弧)数为邻接表中所有单链表的边结点数目。
②若第i个单链表中存在一个边结点,其adjvex域的值为j,则顶点V i和V j之间有边(弧)相连③对于任意一个顶点i,它的入度为所有单链表中adjvex域的值为i的边结点数目,它的出度为第i个单链表中边结点数目。
(5)①邻接表:②把题中V1改V0。
深度优先搜索:V0,V1,V3,V4,V7,V2,V5,V6广度优先搜索:V0,V1,V2,V3,V4,V5,V6,V7(6)①②③权值:1+2+2+4+5=14(7)题中图的顶点标记改为数字,如下图,且求从1到其它顶点的最短路径。
①②(8)V0,V4,152 3 04125 3 045,V1,V2,V3 V4,V5,V0,V1,V2,V3 V4,V0,V1,V2,V5,V3 V4,V0,V5,V1,V2,V3 4.(1)采用邻接表作为存储结构void dfs1(Adjlist g, int v){ int visited[N];ArcNode *stack[N],*p;int j,top=-1;for (j=1;j<=n;j++) visited[j]=0;printf(“%c”,g.vertex[v].data); //访问起始顶点visited[v]=1;p=g.vertex[v].firstarc;while ((p!=NULL)||(top>-1))while (p!=NULL){j=p->adjvex;if (visited[j]!=0) //顶点j被访问过p=p->nextarc; //继续找顶点i的下一个邻接点else{ printf(“%c”,g.vertex[j].data); //访问邻接顶点jvisited[j]=1; //做访问标记stack[++top]=p; //被访问过的顶点指针进栈p=g.vertex[j].firstarc; //沿着顶点j深度优先搜索if (top>-1) {p=stack[top--]; p=p->nextarc;}}}}(2)先建一个空的邻接矩阵,然后在邻接表上顺序地取每个单链表中的边结点,如果边结点不为空,则将邻接矩阵中对应元素置1。
数据结构 第6章 图
数据结构第6章图在计算机科学中,数据结构是组织和存储数据的方式,以便能够有效地进行操作和访问。
而图,作为数据结构中的一个重要概念,在解决许多实际问题中发挥着关键作用。
图是由一组顶点和一组连接这些顶点的边所组成。
顶点可以表示各种实体,比如城市、人、网页等等;边则表示顶点之间的关系,比如城市之间的道路连接、人与人之间的社交关系、网页之间的链接。
从形式上看,图可以分为无向图和有向图。
无向图中,边没有方向,也就是说,如果顶点 A 和顶点 B 之间有一条边,那么从 A 能到达 B,从 B 也能到达 A。
而在有向图中,边是有方向的,比如从顶点 A 指向顶点 B 的边,意味着只能从 A 到达 B,而不能反过来。
图的存储方式有多种,常见的有邻接矩阵和邻接表。
邻接矩阵是一个二维数组,如果顶点 i 和顶点 j 之间有边相连,那么数组中的第 i 行第 j 列和第 j 行第 i 列(对于无向图)或者第 i 行第 j 列(对于有向图)的值为 1,否则为 0。
邻接矩阵的优点是查询边的存在与否非常快速,但缺点是对于稀疏图(边的数量相对顶点数量较少的图)会浪费大量的存储空间。
邻接表则是为每个顶点建立一个链表,链表中存储与该顶点相邻的其他顶点。
这种方式对于稀疏图来说,能够节省大量的存储空间,但在查询边的存在时可能相对较慢。
在对图进行操作时,遍历是一个重要的算法。
常见的图遍历算法有深度优先遍历和广度优先遍历。
深度优先遍历就像是在一个迷宫中,选择一条路一直走到底,直到走不通了再回溯。
具体来说,从一个起始顶点开始,先访问该顶点,然后递归地访问其未被访问过的相邻顶点。
这种遍历方式能够深入探索图的结构,但可能会导致某些部分的图被较晚访问到。
广度优先遍历则像是以起始顶点为中心,逐层向外扩展访问。
首先访问起始顶点,然后依次访问其所有相邻顶点,再依次访问这些相邻顶点的相邻顶点,以此类推。
这种遍历方式能够先访问距离起始顶点较近的顶点。
图在实际应用中有着广泛的用途。
数据结构课后习题答案第六章
欢迎下载
6
-
9.已知信息为“ ABCD BCD CB DB ACB ”,请按此信息构造哈夫曼树,求出每一字符的最优编码。 10. 己知中序线索二叉树采用二叉链表存储结构,链结点的构造为:
_,双分支结点的个数为 ____, 3 分支结点的个数为 ____, C 结点的双亲结点为 ____ ,其孩子结点为 ____。
5. 一棵深度为 h 的满 k 叉树有如下性质:第 h 层上的结点都是叶子结点,其余各层上的每个结点都有
k 棵非空子树。
如果按层次顺序(同层自左至右)从 1 开始对全部结点编号,则:
7.二叉树的遍历分为 ____ ,树与森林的遍历包括 ____。 8.一棵二叉树的第 i(i>=1) 层最多有 ____ 个结点;一棵有 n(n>0) 个结点的满二叉树共有 ____ 个叶子和 ____个非终端结点。
9.在一棵二叉树中,假定双分支结点数为 5 个,单分支结点数为 6 个,则叶子结点为 ____个。
A. 逻辑 B.逻辑和存储 C.物理 D.线性 19.由权值分别是 8,7, 2, 5 的叶子结点生成一棵哈夫曼树,它的带权路径长度为
A. 23 B. 37 C. 46 D. 43 20.设 T 是哈夫曼树,具有 5 个叶结点,树 T 的高度最高可以是 ( )。
A.2 B . 3 C. 4 D. 5
()
6.在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树。
()
7.由于二叉树中每个结点的度最大为 2,所以二叉树是一种特殊的树。 8.二叉树的前序遍历序列中,任意一个结点均处在其子树结点的前面。
《数据结构及其应用》笔记含答案第六章_图
1第6章 图一、填空题1、用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(AOV-网)。
2、有n(n-1)/2条边的无向图称为_无向完全图__;有n(n-1)条边的有向图称为_有向完全图。
3、一个含n 个结点的完全无向图中,其最大边数为__ n(n-1)/2_。
4、顶点表示事件,弧表示活动,权表示活动持续时间的有向图称为AOE-网。
二、判断题1、任何无向图都存在生成树。
( )2、连通分量是无向图中的极小连通子图。
( )3、强连通分量是有向图中的极大强连通子图。
( )4、用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。
( )5、邻接表法只用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。
( )6、求最小生成树的Prim 算法在边较少、结点较多时效率较高。
( )7、图的最小生成树的形状可能不唯一。
( )8、一个AOV 网的拓扑序列一定是唯一的。
网的拓扑序列一定是唯一的。
( ) 9、若AOV 网中存在环,则不能求它的拓扑排序序列。
( )10、若AOV 网中所有顶点都在它的拓扑有序序列中,则该AOV 网必定不存在环。
( ) 11、缩短关键路径上活动的工期一定能够缩短整个工程的工期。
( ) 12、AOE 网中一定只有一条关键路径。
( )三、单项选择题1、在一个图中,所有顶点的度数之和等于图的边数的(、在一个图中,所有顶点的度数之和等于图的边数的( C )倍。
)倍。
A .1/2 B .1 C .2D .4 2、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( B )倍。
)倍。
A .1/2 B .1 C .2 D .4 解释:有向图所有顶点入度之和等于所有顶点出度之和。
3、具有n 个顶点的有向图最多有(个顶点的有向图最多有( B )条边。
)条边。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章图一、填空题1、用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(AOV-网)。
2、有n(n-1)/2条边的无向图称为_无向完全图__;有n(n-1)条边的有向图称为_有向完全图。
3、一个含n个结点的完全无向图中,其最大边数为__ n(n-1)/2_。
4、顶点表示事件,弧表示活动,权表示活动持续时间的有向图称为AOE-网。
二、判断题1、任何无向图都存在生成树。
()2、连通分量是无向图中的极小连通子图。
()3、强连通分量是有向图中的极大强连通子图。
()4、用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。
()5、邻接表法只用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。
()6、求最小生成树的Prim算法在边较少、结点较多时效率较高。
()7、图的最小生成树的形状可能不唯一。
()8、一个AOV网的拓扑序列一定是唯一的。
()9、若AOV网中存在环,则不能求它的拓扑排序序列。
()10、若AOV网中所有顶点都在它的拓扑有序序列中,则该AOV网必定不存在环。
()11、缩短关键路径上活动的工期一定能够缩短整个工程的工期。
()12、AOE网中一定只有一条关键路径。
()三、单项选择题1、在一个图中,所有顶点的度数之和等于图的边数的(C)倍。
A.1/2 B.1 C.2 D.42、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(B)倍。
A.1/2 B.1 C.2 D.4解释:有向图所有顶点入度之和等于所有顶点出度之和。
3、具有n个顶点的有向图最多有(B)条边。
A.n B.n(n-1) C.n(n+1) D.n2解释:有向图的边有方向之分,即为从n个顶点中选取2个顶点有序排列,结果为n(n-1)。
4、n个顶点的连通图用邻接距阵表示时,该距阵至少有(B)个非零元素。
A.n B.2(n-1) C.n/2 D.n25、G是一个非连通无向图,共有28条边,则该图至少有(C)个顶点。
A.7 B.8 C.9 D.10解释:8个顶点的无向图最多有8*7/2=28条边,再添加一个点即构成非连通无向图,故至少有9个顶点。
6、若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是(B)图。
A.非连通B.连通C.强连通D.有向解释:即从该无向图任意一个顶点出发有到各个顶点的路径,所以该无向图是连通图。
7、下面(A)算法适合构造一个稠密图G的最小生成树。
A.Prim算法B.Kruskal算法C.Floyd算法D.Dijkstra算法解释:Prim算法适合构造一个稠密图G的最小生成树,Kruskal算法适合构造一个稀疏图G的最小生成树。
8、用邻接表表示图进行广度优先遍历时,通常借助(B)来实现算法。
A.栈 B. 队列 C. 树D.图解释:广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。
9、用邻接表表示图进行深度优先遍历时,通常借助(A)来实现算法。
A.栈 B. 队列 C. 树D.图解释:广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。
10、深度优先遍历类似于二叉树的(A)。
A.先序遍历B.中序遍历C.后序遍历D.层次遍历11、广度优先遍历类似于二叉树的(D)。
A.先序遍历B.中序遍历C.后序遍历D.层次遍历12、图的BFS生成树的树高比DFS生成树的树高(C)。
A.小B.相等C.小或相等D.大或相等解释:对于一些特殊的图,比如只有一个顶点的图,其BFS生成树的树高和DFS生成树的树高相等。
一般的图,根据图的BFS生成树和DFS树的算法思想,BFS生成树的树高比DFS生成树的树高小。
13、已知图的邻接矩阵如图6.30所示,则从顶点v0出发按深度优先遍历的结果是()。
图6.30 邻接矩阵14、已知图的邻接表如图6.31所示,则从顶点v0出发按广度优先遍历的结果是(D),按深度优先遍历的结果是(D)。
图6.31 邻接表A.0 1 3 2 B.0 2 3 1 C.0 3 2 1 D.0 1 2 315、下面(B)方法可以判断出一个有向图是否有环。
A.深度优先遍历B.拓扑排序C.求最短路径D.求关键路径四、应用题1、已知图6.32所示的有向图,请给出:1)每个顶点的入度和出度;2)邻接矩阵;3)邻接表;4)逆邻接表。
图6.32 有向图图6.33 无向网答案:2、已知如图6.33所示的无向网,请给出: 1)邻接矩阵; 2)邻接表; 3)最小生成树答案:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞6456252363794567555553955434→→→→→→→→→→→→→→→→→→→→→→→→→3、已知图的邻接矩阵如图6.34所示。
试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。
图6.34 邻接矩阵答案:4、有向网如图6.35所示,试用迪杰斯特拉算法求出从顶点a到其他各顶点间的最短路径,完成表6.9。
图6.35 有向网表6.95、试对图6.36所示的AOE-网:1)求这个工程最早可能在什么时间结束;2)求每个活动的最早开始时间和最迟开始时间;3)确定哪些活动是关键活动图6.36 AOE-网答案:按拓扑有序的顺序计算各个顶点的最早可能开始时间Ve和最迟允许开始时间Vl。
然后再计算各个活动的最早可能开始时间e和最迟允许开始时间l,根据l - e = 0? 来确定关键活动,从而确定关键路径。
此工程最早完成时间为43。
关键路径为<1, 3><3, 2><2, 5><5, 6>6、对于下图所示的有向图,试给出:1)每个顶点的入度和出度; 2)邻接矩阵; 3)邻接表;答案:3)7、一个无向图的邻接表如下图所示:1)从顶点出发进行深度优先搜索,经历的结点顺序为。
、、、2)从顶点V0出发进行广度优先搜索,经历的结点顺序为。
、、、8、分别用PRIM 算法和Kruskal算法求下图的最小生成树。
图1:PRIM:(1)(2)(3)U={1} U={1,5} U={1,5,4}(4) (5)U={1,5,4,3} U={1,5,4,3,2}(6) (7)U={1,5,4,3,2,7} U={1,5,4,3,2,7,6}Kruskal:将权值从小到大排列,初始状态仅为含有7个顶点的非连通图(1)初始状态(2)(3)(4)(5)(6)(7)图2:PRIM :、、 、、 、 、、 、 、 、、 、 、 、 、(1)初始状态(2)(3)(4)(5)(6)9、计算下列有向图的拓扑有序序列,并画出每个结点的输出过程。
图1:(1)输出(2)输出(3)输出(4)输出(5)输出(6)输出 (7)输出 (8)输出最后得到拓扑有序序列为: 、 、 、 、 、 、 、 图2:(1)输出 (2)输出 (3)输出(4)输出(5)输出最后得到拓扑有序序列为: 、 、 、 、 、 10、有向图G 如下所示,写出两个拓扑序列。
第一种:(1)输出(2)输出(3)输出(4)输出(4)输出最后得到的拓扑有序序列为: 、 、 、 、 、 第二种:(1)输出(2)输出(3)输出(4)输出(4)输出最后得到的拓扑有序序列为: 、 、 、 、 、 11、如下图所示AOE 网:1)列出各事件的最早、最迟发生时间; 2)列出各活动的最早、最迟发生时间;3)找出该AOE 网中的关键路径,并回答完成该工程需要的最短时间。
图1:关键路径如下图,完成该工程需要的最短时间=5+7+6+8+3=29图2:关键路径如下图,完成该工程需要的最短时间=6+1+9+2=18五、算法设计题1、请在下划线中填写语句,完成采用邻接矩阵表示法创建无向网的算法程序。
#define MaxInt 32767#define MVNum 100typedef char VerTexType;typedef int ArcType;typedef struct{VerTexType vexs[MVNum];ArcType arcs[MVNum][MVNum];int vexnum,arcnum;}AMGraph;Status CreateUDN(AMGraph &G){cin>>G.vexnum>>G.arcnum;for(i = 0; i<G.vexnum; ++i)cin>>G.vexs[i];for(i = 0; i<G.vexnum;++i)for(j = 0; j<G.vexnum;++j)G.arcs[i][j] = MaxInt;for(k = 0; k<G.arcnum;++k){cin>>v1>>v2>>w;i = LocateVex(G, v1);j = LocateVex(G, v2);G.arcs[i][j] = w;G.arcs[j][i] = G.arcs[i][j];}return OK;}。