采用邻接表存储结构实现图的广度优先遍历
智慧树知到《数据结构》章节测试答案
第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)对任意给定的图(顶点数和边数自定),建立它的邻接表并输出;(3)实现图的广度优先遍历*/#include<iostream.h>#include<stdio.h>#include<malloc.h>#defineMAX_NUM20intvisited[MAX_NUM]={0};typedefintVertexType;typedefenum{DG=1,UDG}GraphKind;typedefstructArcNode{intadjvex;intweight;structArcNode*nextarc;ArcNode*info;}ArcNode;typedefstructVNode{VertexTypedata;ArcNode*firstarc;}VNode,AdjList[MAX_NUM];typedefstruct{AdjListvertices;intvexnum,arcnum;GraphKindkind;}ALGraph;voidPRIN(ALGraph&G);voidCreat_adjgraph(ALGraph&G);voidbfs(ALGraph&G,intv);voidCreat_adjgraphDG(ALGraph&G);voidCreat_adjgraphUDG(ALGraph&G);voidCreat_adjgraph(ALGraph&G);voidCreat_adjgraphDG(ALGraph&G){inti,s,d;ArcNode*p=NULL,*q=NULL;G.kind=DG;printf("请输入顶点数和边数:");scanf("%d%d",&G.vexnum,&G.arcnum);for(i=0;i<G.vexnum;++i){printf("第%d个顶点信息:",i+1);scanf("%d",&G.vertices[i].data);G.vertices[i].firstarc=NULL;}for(i=0;i<G.arcnum;++i){printf("第%d条边的起始顶点编号和终止顶点编号:",i+1);scanf("%d%d",&s,&d);while(s<1||s>G.vexnum||d<1||d>G.vexnum){printf("编号超出范围,重新输入");scanf("%d%d",&s,&d);}s--;d--;p=new(ArcNode);p->adjvex=d;p->nextarc=G.vertices[s].firstarc;G.vertices[s].firstarc=p;}}voidCreat_adjgraphUDG(ALGraph&G){inti,s,d;ArcNode*p,*q;G.kind=UDG;printf("请输入顶点数和边数:");scanf("%d%d",&G.vexnum,&G.arcnum);for(i=0;i<G.vexnum;++i){printf("第%d个顶点信息:",i+1);scanf("%d",&G.vertices[i].data);G.vertices[i].firstarc=NULL;}for(i=0;i<G.arcnum;++i){printf("第%d条边的起始顶点编号和终止顶点编号:",i+1);scanf("%d%d",&s,&d);while(s<1||s>G.vexnum||d<1||d>G.vexnum){printf("编号超出范围,重新输入");scanf("%d%d",&s,&d);}s--;d--;p=new(ArcNode);p->adjvex=d;p->nextarc=G.vertices[s].firstarc;G.vertices[s].firstarc=p;q=new(ArcNode);q->adjvex=s;q->nextarc=G.vertices[d].firstarc;G.vertices[d].firstarc=q;}}voidPRIN(ALGraph&G){inti;ArcNode*p;if(G.kind==DG||G.kind==UDG){for(i=0;i<G.vexnum;++i){printf("V%d:",G.vertices[i].data);p=G.vertices[i].firstarc;while(p!=NULL){printf("%d\t",p->adjvex+1);p=p->nextarc;}printf("\n");}}}voidbfs(ALGraph&G,intv){v--;ArcNode*p;intqueue[MAX_NUM],front=0,rear=0;intw,i;for(i=0;i<G.vexnum;i++)visited[i]=0;printf("%4d",v+1);visited[v]=1;rear=(rear+1)%MAX_NUM;queue[rear]=v;while(front!=rear){front=(front+1)%MAX_NUM;w=queue[front];p=G.vertices[w].firstarc;while(p!=NULL){if(visited[p->adjvex]==0){printf("%3d",p->adjvex+1);visited[p->adjvex]=1;rear=(rear+1)%MAX_NUM;queue[rear]=p->adjvex;}p=p->nextarc;}}printf("\n");}voidCreat_adjgraph(ALGraph&G){printf("1:有向图2:无向图\n");printf("请根据上述提示输入图的类型:");scanf("%d",&G.kind);switch(G.kind){caseDG:Creat_adjgraphDG(G);PRIN(G);break;caseUDG:Creat_adjgraphUDG(G);PRIN(G);break;default:printf("ERROR");break;}}voidmain(){ALGraphG;Creat_adjgraph(G);printf("\n");printf("广度优先搜索遍历序列为:\n");bfs(G,1);printf("\n");}。
数据结构(专)阶段练习4
华东理工大学网络学院(专科)《数据结构》------ch7图、ch9排序班级学号姓名成绩一、填空题(每空1分,共10分)1.具有n个顶点的有向图最多有n(n-1)条边。
2.在无向图G的邻接矩阵中,求第i个结点的度的方法是求邻接矩阵第i行非零元素之和。
3.堆排序通常采用顺序存储结构。
4. 与快速排序和堆排序相比,归并排序的最大特点是,它是一种稳定的排序方法。
5.具有8个顶点的有向完全图有56 条弧。
6. 在无向图G的邻接矩阵A中,若A[i][j]等于1,则A[j][i]等于 1 。
7.在一个待排序的序列中,只有很少量元素不在自己最终的正确位置上,但离他们的正确位置都不远,则使用直接插入排序方法最好。
8. 已知有向图的邻接矩阵,要计算i号顶点的入度,计算方法是:将i列元素累加。
9. n个顶点的强连通图至少有n 条边,至多有n(n-1) 条边。
二、判断正误(对的用”T”表示,错误的用”F”表示。
每小题1分,共10分)1. ( T )若一个有向图的邻接矩阵中对角线以下元素均为零,则该图的拓扑有序序列必定存在。
2. ( F )快速排序的速度在所有的排序方法中为最快,而且所需附加空间也最少。
3.( F )采用邻接表存储的图的深度优先遍历算法类似二叉树的按层次遍历算法。
4.(T )在待排序的元素序列基本有序的前提下,效率最高的是插入排序。
5.(T )图的广度优先遍历类似于树的层次遍历。
6.(T )拓扑排序时,总是在有向图中选择入度为0的顶点输出。
7.( F )若要求一个稠密图G的最小生成树,最好用Kruscal算法来求解。
8.(T )拓扑排序输出的顶点数小于有向图的顶点数,则该图一定存在回路。
9.(T )设有一稠密图G,则G采用邻接矩阵存储较省空间。
10.(F)n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为O(n+e)。
三、单项选择题(每小题2分,共20分)1.已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是 C 。
计算机学科专业基础综合数据结构-图(二)_真题-无答案
计算机学科专业基础综合数据结构-图(二)(总分100,考试时间90分钟)一、单项选择题(下列每题给出的4个选项中,只有一个最符合试题要求)1. 具有6个顶点的无向图至少应有______条边才能确保是一个连通图。
A.5 B.6 C.7 D.82. 设G是一个非连通无向图,有15条边,则该图至少有______个顶点。
A.5 B.6 C.7 D.83. 下列关于无向连通图特性的叙述中,正确的是______。
①所有顶点的度之和为偶数②边数大于顶点个数减1③至少有一个顶点的度为1A.只有① B.只有② C.①和② D.①和③4. 对于具有n(n>1)个顶点的强连通图,其有向边的条数至少是______。
A.n+1B.nC.n-1D.n-25. 下列有关图的说法中正确的是______。
A.在图结构中,顶点不可以没有任何前驱和后继 B.具有n个顶点的无向图最多有n(n-1)条边,最少有n-1条边 C.在无向图中,边的条数是结点度数之和 D.在有向图中,各顶点的入度之和等于各顶点的出度之和6. 对于一个具有n个顶点和e条边的无向图,若采用邻接矩阵表示,则该矩阵大小是______,矩阵中非零元素的个数是2e。
A.n B.(n-1)2 C.n-1 D.n27. 无向图的邻接矩阵是一个______。
A.对称矩阵 B.零矩阵 C.上三角矩阵 D.对角矩阵8. 从邻接矩阵可知,该图共有______个顶点。
如果是有向图,该图共有4条有向边;如果是无向图,则共有2条边。
A.9 B.3 C.6 D.1 E.5 F.4 G.2 H.09. 下列说法中正确的是______。
A.一个图的邻接矩阵表示是唯一的,邻接表表示也唯一 B.一个图的邻接矩阵表示是唯一的,邻接表表示不唯一 C.一个图的邻接矩阵表示不唯一,邻接表表示唯一 D.一个图的邻接矩阵表示不唯一,邻接表表示也不唯一10. 用邻接表存储图所用的空间大小______。
A.与图的顶点数和边数都有关 B.只与图的边数有关 C.只与图的顶点数有关 D.与边数的二次方有关11. 采用邻接表存储的图的深度优先搜索算法类似于二叉树的______,广度优先搜索算法类似于二叉树的层次序遍历。
国开作业《数据结构(本)-形考作业》 (20)
题目:如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是()。
选项A:一棵树选项B:有回路选项C:连通图选项D:完全图答案:连通图题目:下列有关图遍历的说法不正确的是()。
选项A:非连通图不能用深度优先搜索法选项B:图的遍历要求每一顶点仅被访问一次选项C:连通图的深度优先搜索是一个递归过程选项D:图的广度优先搜索中邻接点的寻找具有“先进先出”的特征答案:非连通图不能用深度优先搜索法题目:无向图的邻接矩阵是一个()。
选项A:对称矩阵选项B:对角矩阵选项C:上三角矩阵选项D:零矩阵答案:对称矩阵题目:图的深度优先遍历算法类似于二叉树的()遍历。
选项A:后序选项B:先序选项C:层次选项D:中序答案:先序题目:已知下图所示的一个图,若从顶点V1出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
/pluginfile.php/67710/question/questiontext/2988635/7/108770/01 .png选项A:V1V2V4V8V3V5V6V7选项B:V1V2V4V8V5V3V6V7选项C:V1V2V4V5V8V3V6V7选项D:V1V3V6V7V2V4V5V8答案:V1V2V4V8V5V3V6V7题目:在一个图G中,所有顶点的度数之和等于所有边数之和的()倍。
选项A:1选项B:1/2选项C:4选项D:2答案:2题目:邻接表是图的一种()。
选项A:顺序存储结构选项B:索引存储结构选项C:散列存储结构选项D:链式存储结构答案:链式存储结构题目:已知如图2所示的一个图,若从顶点a出发,按广度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
/pluginfile.php/67710/question/questiontext/2988635/8/108771/02 .png选项A:aebcfd选项B:abcefd选项C:acfdeb选项D:abcedf答案:abcefd题目:已知如图3所示的一个图,若从顶点a出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
数据结构选择、判断、填空
北京语言大学网络教育学院《数据结构》一、【单项选择题】1、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则采用(C)存储方式最节省时间。
[C] 带头结点的双循环链表2、队列操作的原则是(D)。
[D] 先进先出3、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是(B)的二叉树。
[B] 高度等于其结点数4、在下列排序方法中,(C)方法平均时间复杂度为0(nlogn),最坏情况下时间复杂度为0(n2)。
[C] 快速排序5、对二叉树从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一个结点的左、右孩子中,其左孩子编号小于右孩子编号。
则可采用(C)次序的遍历实现编号。
[C] 后序6、若线性表中采用二分查找法查找元素,该线性表应该(C)。
[C] 元素按值有序,且采用顺序存储结构。
7、对待排序数据的初始状态不作任何要求的排序方法有(A)。
[A] 插入和快速排序8、已知数据表A中每个元素距其最终位置不远,则采用(B)排序算法最节省时间。
[B] 插入排序9、以下哪一个不是队列的基本运算?(B)[B] 从队列中删除第i个元素。
10、广度优先遍历类似于二叉树的(D)。
[D] 层次遍历一、【单项选择题】1、在一个图中,所有顶点的度数之和等于图的边数的(C)倍。
[C] 22、采用顺序查找方法查找长度为n的线性表,平均查找长度为(C)。
[C] (n+1)/23、线性链表不具有的特点是(A)。
[A] 随机访问4、删除长度为n的非空顺序表的第i个数据元素之前需要移动表中(A)个数据元素。
[A] n-i5、任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序(A)。
[A] 不发生改变6、若用数组S[n]作为两个栈S1和S2的共用存储结构,对任何一个栈,只有当S[n]全满时才不能作入栈操作。
为这两个栈分配空间的最佳方案是(C)。
[C] S1的栈底位置为0,S2的栈底位置为n-17、对一棵二叉排序树进行(C)遍历,可以得到该二叉树的所有结点按值从小到大排列的序列。
JAV数据库考题适用于大连东软信息学院
5.8 习题5.8.1 知识点:图的基本概念一、选择题1①n个顶点的连通图至少有( A )条边。
A.n-1 B.nC.n+1 D.02① 在无向图中定义顶点vi与vj之间的路径为从vi到达vj的一个(B )。
A .顶点序列B .边序列C.权值总和 D .边的条数3① 具有n个顶点的有向图最多可包含(D )条有向边。
A. n-1B. nC. n(n-1)/2D. n(n-1)4①在无向图中定义顶点的度为与它相关联的(B )的数目。
A .顶点B .边C.权 D .权值5①一个有N个顶点的无向图中,要连通全部顶点至少需要(C )条边。
A. NB. N+1C. N -1D. N/26② 含N个顶点的连通图中的任意一条简单路径,其长度不可能超过( C )。
A. 1B. N/2C. N -1D. N7② 设无向图的顶点个数为n,则该图最多有(B )条边。
【清华大学1998】【西安电子科技大1998】【北京航空航天大学1999】A. n-1B. n(n-1)/2C. n(n+1)/2D. n(n-1)8② 在一个无向图中,所有顶点的度数之和等于所有边数( B )倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( C )倍。
【哈尔滨工业大学2001】A. 1/2B. 2C. 1D. 4二、填空题1②n (n> 0)个顶点的无向图中顶点的度的最大值为___n-1 ____ 。
2②n (n> 0)个顶点的无向图最少有___0 _______ 条边。
3②n (n> 0)个顶点的连通无向图各顶点的度之和最少为__2(n-1)__ 。
4② 具有n个顶点的无向完全图,边的总数为__n(n-1)/2 ___ 条;而具有n个顶点的有向完全图边的总数为__n(n-1) ____ 条。
5② 在有n个顶点的有向图中,每个顶点的度最大可达__2(n-1)____ 。
6② 在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要__n___条弧。
实验六 图及其应用
实验六图及其应用数据结构实验六图及其应用1、实验目的? 熟练掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法 ? 掌握图的基本运算及应用? 加深对图的理解,逐步培养解决实际问题的编程能力2、实验内容:采用邻接表或邻接矩阵方式存储图,实现图的深度遍历和广度遍历;用广度优先搜索方法找出从一顶点到另一顶点边数最少的路径。
1.问题描述:利用邻接表存储结构,设计一种图(有向或无向),并能够对其进行如下操作:1) 创建一个可以随机确定结点数和弧(有向或无向)数的图; 2) 根据图结点的序号,得到该结点的值;3) 根据图结点的位置的第一个邻接顶点的序号,以及下一个邻接顶点的序号;4) 实现从第v 个顶点出发对图进行深度优先递归遍历; 5) 实现对图作深度优先遍历;6) 实现对图进行广度优先非递归遍历; 编写主程序,实现对各不同的算法调用。
2.实现要求:(以邻接表存储形式为例)编写图的基本操作函数::对图的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。
1)“建立图的邻接表算法”:CreateGraph(ALGraph *G) 操作结果:采用邻接表存储结构,构造没有相关信息的图G2)“邻接表表示的图的递归深度优先遍历算法”:DFSTraverse(ALGraphG,void(*Visit)(char*)) 初始条件:图G 已经存在;操作结果:返回图的按深度遍历的结果。
3)“邻接表表示的图的广度优先遍历算法”: BFSTraverse(ALGraphG,void(*Visit)(char*)) 初始条件:图G 已经存在;操作结果:返回图的按广度遍历的结果。
4)“邻接表从某个结点开始的广度优先遍历算法”:BFS(ALGraph G, int v)初始条件:图G 已经存在;操作结果:返回图从某个结点开始的按广度遍历的结果。
分析: 修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。
基于邻接表存储结构的遍历策略探讨
G > e n m n/顶 点向量 中的结点 -vx u = : / 弧尾 , 弧表 中存放弧头
( 即单链 表头结点) 作
s a f& ,j: c n (i&)∥输入 弧, 即弧 的头尾端点 户约定如果某 次输 入的弧尾是0 表 示弧 已经全部输入完 ,
基于邻接表存储结构的遍历策略探讨 计析 设分・
李 亮 梅 松。 . (武汉大学 管理 1 信息 学院 湖北 武汉 407;. 湖北省委党 , 30 2 2 中共 校信息网 心 湖北 武汉 40 2 络中 , 30 ) 2
摘 要 : 图结 构是 最常用 的非缌 数据 结构 之一, 图的遍历是其 上的基 础操 作 。 论文首先 阐述 了图的邻接 表存 储 方式的 实现 算法, 然后 分析
f r( = . e [] f r t d e w: = 一 n x ) i o w G v x v . i e g : w w > e t f s s
fr (= : n i+∥初 始化顶 点数组 , 是当前 图中顶点 的 o i0 i : ) : < + n 个数
(c n (G >e si.a a :G >e si.i s a c N L : s a f& -v x [ d t ) - vx [ fr t r = U L) , ] ]
21邻接表存ห้องสมุดไป่ตู้方式创建有向图的算法 .
i t A jr a eA O a h G n dC e t (1r p )
有路径相通的项点都被访问完为止。 {-v x =V x o e m lo (a n d * i e fVx o e) 至 图中所有与v G >e s (e N d a lcm x o e s z o (e N d ) 为了便于在算法 中区分顶点是否 已被访 问过 , 需要创建一 : ∥分配 空间. m x o e . a n d 是最多能容纳 的顶点个数 , 在程 序运行 个 一维数 组v st dn n i ie []( 是图中顶点 的数 目) 用来设置访 问 , 时由用户输入
数据结构模考试题及答案
数据结构模考试题及答案一、单选题(共100题,每题1分,共100分)1、下面关于生成树的描述中,不正确的是( )A、生成树是树的一种表现形式B、生成树一定是连通的C、生成树一定不含有环D、若生成树顶点个数为n,则其边数一定为n-1正确答案:A2、用邻接表表示图进行广度优先遍历时,通常是采用()来实现算法的。
A、图B、栈C、队列D、树正确答案:C3、下列四种基本的逻辑结构中,结构结点间不存在任何逻辑联系的是()A、集合B、树形结构C、图形结构D、线性结构正确答案:A4、以下数据结构中,哪一个是线性结构()。
A、线索二叉树B、二叉树C、有向图D、串正确答案:D5、n个顶点的连通图至少中含有( )边。
A、n-1B、n+1C、nD、0正确答案:A6、G是一个非连通无向图,共有28条边,则该图至少有( )个顶点。
A、7B、8C、6D、9正确答案:D7、在一个链队列中,假定front和rear分别为队首和队尾指针,则删除一个结点的操作为()。
A、rear=front->nextB、front=rear->nextC、front=front->nextD、rear=rear->next正确答案:C8、一个栈的输入序列是 1 2 3 4 5,则下列序列中是栈的输出序列的是()。
A、1,4,2,5,3B、3,1,2,4,5C、2,3,4,1,5D、5,4,1,3,2正确答案:C9、假设以数组A[m]存放循环队列的元素。
已知队列的长度为length,指针rear指向队尾元素的下一个存储位置,则队头元素所在的存储位置为( )A、(rear-length+m+1)%mB、(rear-length+m)%mC、(rear-length+m-1)%mD、(rear-length)%m正确答案:B10、与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。
A、存储结构B、操作C、逻辑结构D、算法正确答案:C11、深度为k的完全二叉树中最少有()个结点。
数据结构第7章图习题
第7章图一、单项选择题1.在一个无向图G中,所有顶点的度数之和等于所有边数之和的______倍。
A.l/2 B.1C.2 D.42.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的______倍。
A.l/2 B.1C.2 D.43.一个具有n个顶点的无向图最多包含______条边。
A.n B.n+1C.n-1 D.n(n-1)/24.一个具有n个顶点的无向完全图包含______条边。
A.n(n-l) B.n(n+l)C.n(n-l)/2 D.n(n-l)/25.一个具有n个顶点的有向完全图包含______条边。
A.n(n-1) B.n(n+l)C.n(n-l)/2 D.n(n+l)/26.对于具有n个顶点的图,若采用邻接矩阵表示,则该矩阵的大小为______。
A.nB.n×nC.n-1 D.(n-l)×(n-l)7.无向图的邻接矩阵是一个______。
A.对称矩阵B.零矩阵C.上三角矩阵D.对角矩阵8.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则表头向量的大小为______。
A.n B.eC.2n D.2e9.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则所有顶点邻接表中的结点总数为______。
A.n B.eC.2n D.2e10.在有向图的邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。
A.入边B.出边C.入边和出边D.不是入边也不是出边11.在有向图的逆邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。
A.入边B.出边C.入边和出边D.不是人边也不是出边12.如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是______。
A.完全图B.连通图C.有回路D.一棵树13.采用邻接表存储的图的深度优先遍历算法类似于二叉树的______算法。
A.先序遍历B.中序遍历C.后序遍历 D.按层遍历14.采用邻接表存储的图的广度优先遍历算法类似于二叉树的______算法。
第6-10章 树和二叉树--答案
第6章树和二叉树一、基础知识题1.列出右图所示二叉树的叶结点、分支结点和每个结点的层次。
[解答]二叉树的叶结点有⑥、⑧、⑨。
分支结点有①、②、③、④、⑤、⑦。
结点①的层次为0;结点②、③的层次为1;结点④、⑤、⑥的层次为2;结点⑦、⑧的层次为3;结点⑨的层次为4。
2.使用(1)顺序表示和(2)二叉链表表示法,分别画出右图所示二叉树的存储表示。
[解答](1)顺序表示(2)二叉链表表示3.在结点个数为n(n>1)的各棵树中,高度最小的树的高度是多少?它有多少个叶结点?多少个分支结点?高度最大的树的高度是多少?它有多少个叶结点?多少个分支结点?[解答]结点个数为n时,高度最小的树的高度为1,有2层;它有n-1个叶结点,1个分支结点;高度最大的树的高度为n-1,有n层;它有1个叶结点,n-1个分支结点。
4.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。
[解答]具有3个结点的树具有3个结点的二叉树5.如果一棵树有n1个度为1的结点,有n2个度为2的结点,…,n m个度为m的结点,试问有多少个度为0的结点?试推导之。
[解答]总结点数n=n0+n1+n2+…+n m总分支数e=n-1= n0+n1+n2+…+n m-1=m×n m+(m-1)×n m-1+…+2×n2+n1则有 n 0=∑=+-mi i n i 21))1((6.试分别找出满足以下条件的所有二叉树:(1) 二叉树的前序序列与中序序列相同; (2) 二叉树的中序序列与后序序列相同; (3) 二叉树的前序序列与后序序列相同。
[解答](1) 二叉树的前序序列与中序序列相同:空树或缺左子树的单支树;(2) 二叉树的中序序列与后序序列相同:空树或缺右子树的单支树; (3) 二叉树的前序序列与后序序列相同:空树或只有根结点的二叉树。
7.填空题(1)对于一棵具有n 个结点的树,该树中所有结点的度数之和为 n-1 。
中南大学《数据结构》课程作业(在线作业)二及参考答案
(一) 单选题1. 用邻接表表示图进行深度优先遍历时,通常是采用()来实现算法的。
(A) 栈(B) 队列(C) 树(D) 图参考答案: (A)2. 设图的邻接链表如图所示,则该图的边的数目是()。
(A) 4(B)5 (C) 10(D) 20参考答案: (B)3. 若采用邻接矩阵翻存储一个n 个顶点的无向图,则该邻接矩阵是一个()。
(A)上三角矩阵(B)稀疏矩阵(C)对角矩阵(D)对称矩阵参考答案: (D)4.无向图,其中:,对该图进行深度优先遍历,得到的顶点序列正确的是()。
(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参考答案: (D)5. 设森林F 对应的二叉树为B ,它有m 个结点,B 的根为p ,p 的右子树结点个数为n,森林F 中第一棵子树的结点个数是()。
(A)(B)(C)(D) 条件不足,无法确定参考答案: (A)6. 关键路径是事件结点网络中()。
(A) 从源点到汇点的最长路径(B) 从源点到汇点的最短路径(C) 最长回路(D) 最短回路参考答案: (A)7. 树最适合用来表示()。
(A)有序数据元素(B) 无序数据元素(C) 元素之间具有分支层次关系的数据(D) 元素之间无联系的数据参考答案:(C)8. 在一棵具有n个结点的二叉链表中,所有结点的空域个数等于()。
(A)n(B)(C)(D)参考答案:(C)9. 在一个非空二叉树的中序遍历序列中,根结点的右边()。
(A)只有右子树上的所有结点(B) 只有右子树上的部分结点(C) 只有左子树的上的部分结点(D) 只有左子树上的所有结点参考答案:(A)10. 有8个结点的无向连通图最少有()条边。
(A)5 (B) 6 (C) 7 (D) 8参考答案:(C)11. 含有10个结点的二叉树中,度为0的结点数为4,则度为2的结点数为()。
(A)3 (B) 4 (C) 5 (D) 6参考答案:(A)12. 在有n个叶子结点的哈夫曼树中,其结点总数为()。
【数据结构期末试题及答案】样卷7
2020学年数据结构期末试题及答案(七)一、选择题1、12、对于具有n个顶点的图,若采用邻接矩阵表示,则该矩阵的大小为()。
A. nB. n2C. n-1D. (n-1)22、如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是()。
A. 完全图B. 连通图C. 有回路D. 一棵树3、关键路径是事件结点网络中()。
A. 从源点到汇点的最长路径B. 从源点到汇点的最短路径C. 最长的回路D. 最短的回路4、下面()可以判断出一个有向图中是否有环(回路)。
A. 广度优先遍历B. 拓扑排序C. 求最短路径D. 求关键路径5、带权有向图G用邻接矩阵A存储,则顶点i的入度等于A中()。
A. 第i行非无穷的元素之和B. 第i列非无穷的元素个数之和C. 第i行非无穷且非0的元素个数D. 第i行与第i列非无穷且非0的元素之和6、采用邻接表存储的图,其深度优先遍历类似于二叉树的()。
A. 中序遍历B. 先序遍历C. 后序遍历D. 按层次遍历7、无向图的邻接矩阵是一个()。
A. 对称矩阵B. 零矩阵C. 上三角矩阵D. 对角矩阵8、当利用大小为N的数组存储循环队列时,该队列的最大长度是()。
A. N-2B. N-1C. ND. N+19、邻接表是图的一种()。
A. 顺序存储结构B.链式存储结构C. 索引存储结构D. 散列存储结构10、下面有向图所示的拓扑排序的结果序列是()。
A. 125634B. 516234C. 123456D. 52164311、在无向图中定义顶点vi与vj之间的路径为从vi到vj的一个()。
A. 顶点序列B. 边序列C. 权值总和D. 边的条数12、在有向图的逆邻接表中,每个顶点邻接表链接着该顶点所有()邻接点。
A. 入边B. 出边C. 入边和出边D. 不是出边也不是入边13、设G1=(V1,E1)和G2=(V2,E2)为两个图,如果V1V2,E1E2则称()。
A. G1是G2的子图B. G2是G1的子图C. G1是G2的连通分量D. G2是G1的连通分量14、已知一个有向图的邻接矩阵表示,要删除所有从第i个结点发出的边,应()。
非线性数据结构的实现与应用【邻接表,有向图,图的遍历】
数据结构实验报告非线性数据结构的实现与应用2021年12月28日一.实验目的1. 掌握基于邻接表存储结构的有向图的实现。
2. 掌握有向图的两类遍历算法。
3. 掌握有向图的拓扑排序算法。
二. 实验要求、内容1. 基于邻接表存储结构实现有向图的典型操作(构造、析构、增加顶点、删除顶点、增加弧、删除弧,查找一个顶点、判空、判满、图中顶点个数、邻接表中指定顶点的第一个邻接顶点、深度优先遍历、广度优先遍历),测试和调试程序。
2. 用递归方法实现有向图的拓扑排序算法,测试和调试程序。
3. 用栈实现有向图的拓扑排序算法,测试和调试程序。
4. 用队列实现有向图的拓扑排序算法,测试和调试程序。
5. 按要求撰写实验报告、录制程序运行以及讲解程序的视频。
三.实验设备计算机、Windows 操作系统、C++语言集成开发环境。
四.实验原理(或程序框图)及步骤如下图所示,为图的存储方式,其中有两类结构体分别表示点和边,点结构体有两个指针,前者指向下一个节点,后者指向以该点为起点的第一条边。
而边节点则是由一个目标点节点指针和下一个边节点指针组成。
图中点节点将进行适当的删减,以便后续绘图。
下面将对几个重要的图操作进行讲解,其他较为简便的操作将不再赘述。
关于节点的插入:插入节点时分三种情况,分别是该节点存在、该图中没有节点该节点为首节点、该图中有节点插入要先查找插入位置。
如图为为插入节点的流程图及普通情况下的节点插入方式,且图中的点节点进行了缩减。
该实验的程序中在查找插入位置时通过两个指针copy和pre_copy分别记录第一个比待插数据大的或等于的节点及该节点的前一个节点。
在进行插入时仅考虑copy和pre_copy *nextVerte*pArdata inDegre outDegre processed的值即可判断不同插入情况。
后图中的插入为普通情况的插入,在插入时仅需使pre_copy节点的下一项节点指针指向新增节点然后让新增节点的下一节点指针指向copy指向的节点即可。
数据结构(第4版)习题和实验参考答案解析数据结构复习题资料[完整版](c语言版)
数据结构基础及深入及考试复习资料习题及实验参考答案见附录结论1、数据的逻辑结构是指数据元素之间的逻辑关系。
即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。
它依赖于计算机。
存储结构可分为4大类:顺序、链式、索引、散列3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。
它由基本的数据类型构成,并包括一组相关的服务(或称操作)。
它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。
4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
5、在数据结构中,从逻辑上可以把数据结构分成( C )A、动态结构和表态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构6、算法的时间复杂度取决于( A )A、问题的规模B、待处理数据的初态C、问题的规模和待处理数据的初态线性表1、线性表的存储结构包括顺序存储结构和链式存储结构两种。
2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( E ),删除一个元素需要移动的元素的个数为( A )。
A、(n-1)/2B、nC、n+1D、n-1E、n/2F、(n+1)/2G、(n-2)/23、“线性表的逻辑顺序与存储顺序总是一致的。
”这个结论是( B )A、正确的B、错误的C、不一定,与具体的结构有关4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D )A、必须是连续的B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以5、带头结点的单链表为空的判定条件是( B )A、head==NULLB、head->next==NULLC、head->next=headD、head!=NULL6、不带头结点的单链表head为空的判定条件是( A )A、head==NULLB、head->next==NULLC、head->next=headD、head!=NULL7、非空的循环单链表head的尾结点P满足( C )A、p->next==NULLB、p==NULLC、p->next==headD、p==head8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( B )A、O(1)B、O(n)C、O(n2)D、O(nlog2n)9、在一个单链表中,若删除p所指结点的后继结点,则执行( A )A、p->next=p->next->next;B、p=p->next;p->next=p->next->next;C、p->next=p->next;D、p= p->next->next;10、在一个单链表中,若在p所指结点之后插入s所指结点,则执行( B )A、s->next=p;p->next=s;B、s->next=p->next;p->next=s;C、s->next=p->next;p=s;D、p->next=s;s->next=p;11、在一个单链表中,已知q是p的前趋结点,若在q和p之间插入结点s,则执行( C )A、s->next=p->next;p->next=s;B、p->next=s->next;s->next=p;C、q->next=s;s->next=p;D、p->next=s;s->next=q;12、在线性结构中,第一个结点没有前趋结点,其余每个结点有且只有 1 个前趋结点。
实验报告:图的存储结构和遍历
int queue[6],front=0,rear=0;
int visited[6];
int w,i;
for(i=0;i<G->n;i++)
visited[i]=0;
printf("%d ",v);
visited[v]=1;
rear=(rea叶1)%6;
queue[rear]=v;
ArcNode *p;
for(i=0;i<G->n;i++)
{ p=G->adjlist[i].firstarc; printf("%d:",i);
while (p!=NULL)
{ printf("%d ",p->adjvex); p=p_>nextarc;
}
printf("\n");
}
}
void dfs (ALGraph *G,int v)
{ p=(ArcNode*)malloc(sizeof(ArcNode)); p->adjvex=j;
p->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p;
}
G->n=g.n;
}
void dispadj(ALGraph *G)
{ int i;
printf("\n");
}
printf("邻接矩阵\n");
G=(ALGraph*)malloc(sizeof(ALGraph));
mattolist(g,G);
利用邻接表存储无向图并深度遍历和广度遍历图
利用邻接表存储无向图,并深度遍历和广度遍历图#include <stdio.h>#include <iostream.h>#include <malloc.h>#define max 20int visited[max];int w;typedef struct arcnode{int adjvex;//该弧指向的顶点的位置struct arcnode *nextarc;//弧尾相同的下一条弧char *info;//该弧信息}arcnode;typedef struct vnode{char data;//结点信息arcnode *firstarc;//指想第一条依附该结点的弧的指针}vnode,adjlist;typedef struct{adjlist vertices[max];int vexnum,arcnum;int kind;}algraph;typedef struct qnode{int data;struct qnode *next;}qnode,*queueptr;typedef struct{queueptr front;queueptr rear;}linkqueue;void dfs(algraph gra,int i);int creatadj(algraph &gra)//用邻接表存储图{int i,n,m;char cha;cout<<"输如结点个数:";cin>>n;cout<<"输如弧个数:";cin>>m; arcnode *arc,*tem;for(i=0;i<n;i++){cout<<"输如结点信息:";cin>>gra.vertices[i].data;gra.vertices[i].firstarc=NULL;}for(i=0;i<n;i++){cout<<"结点"<<i<<"是否有出度:";cin>>cha;if(cha=='y'){arc=(arcnode *)malloc(sizeof(arcnode));cin>>arc->adjvex;gra.vertices[i].firstarc=arc;cout<<"是否还有出度:";cin>>cha;while(cha=='y'){tem=(arcnode *)malloc(sizeof(arcnode));cin>>tem->adjvex;arc->nextarc=tem;arc=tem;cout<<"是否还有出度:";cin>>cha;}arc->nextarc=NULL;}if(cha=='n')continue;}gra.vexnum=n;gra.arcnum=m;return 1;}int firstadjvex(algraph gra,vnode v)//返回依附顶点V的第一个点//即以V为尾的第一个结点{return v.firstarc->adjvex;}int nextadjvex(algraph gra,vnode v,int w)//返回依附顶点V的相对于W的下一个顶点{arcnode *p;p=v.firstarc;while(p!=NULL){if(p->adjvex!=w)p=p->nextarc;if(p->adjvex==w&&p->nextarc!=NULL)return p->nextarc->adjvex;else return 0;}int initqueue(linkqueue &q)//初始化队列{q.rear=(queueptr)malloc(sizeof(qnode)); q.front=q.rear;if(!q.front)return 0;q.front->next=NULL;return 1;}int enqueue(linkqueue &q,int e)//入队{queueptr p;p=(queueptr)malloc(sizeof(qnode));if(!p)return 0;p->data=e;p->next=NULL;q.rear->next=p;q.rear=p;return 1;}int dequeue(linkqueue &q,int &e)//出队queueptr p;if(q.front==q.rear)return 0;p=q.front->next;e=p->data;q.front->next=p->next;if(q.rear==p)q.rear=q.front;free(p);return 1;}int queueempty(linkqueue q)//判断队为空{if(q.front==q.rear)return 1;return 0;}void bfstra(algraph gra,vnode v)//广度优先遍历{int i,e;linkqueue q;for(i=0;i<gra.vexnum;i++)visited[i]=0;initqueue(q);for(i=0;i<gra.vexnum;i++)if(!visited[i]){visited[i]=1;cout<<gra.vertices[i].data;enqueue(q,i);while(!queueempty(q))dequeue(q,e);for(w=firstadjvex(gra,gra.vertices[e]);w>0;w=nextadjvex(gra,gra .vertices[e],w))if(!visited[w]){visited[w]=1;cout<<gra.vertices[w].data;enqueue(q,w);}}}int dfstra(algraph gra,vnode v)//深度优先遍历{int i;for(i=0;i<gra.vexnum;i++)visited[i]=0;for(i=0;i<gra.vexnum;i++)if(!visited[i])dfs(gra,i);return 1;}void dfs(algraph gra,int i){visited[i]=1;cout<<gra.vertices[i].data;for(w=firstadjvex(gra,gra.vertices[i]);w>0;w=nextadjvex(gra,gra.ver tices[i],w))if(!visited[w])dfs(gra,w);}void main(){algraph gra;vnode v;creatadj(gra);cout<<"广度优先遍历:";bfstra(gra,v);cout<<endl;cout<<"深度优先遍历:";dfstra(gra,v);cout<<endl; }。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while(p!=NULL)
{
if(visited[p->adjvex]==0)
{
printf("%3d",p->adjvex+1);
visited[p->adjvex]=1;
rear=(rear+1)%MAX_NUM;
queue[rear]=p->adjvex;}
p=p->nextarc;}
typedef int VertexType;
typedef enum {DG=1,UDG}GraphKind;
typedef struct ArcNode
{
int adjvex;
int weight;
struct ArcNode *nextarc;
ArcNode *info;
}ArcNode;
typedef struct VNode
scanf("%d",&[i].data);
[i].firstarc=NULL;}
for(i=0;i<;++i)
{
printf("第%d条边的起始顶点编号和终止顶点编号:",i+1);
scanf("%d %d",&s,&d);
while(s<1||s>||d<1||d>
{
printf("编号超出范围,重新输入");
scanf("%d%d",&s,&d);}
s--;
d--;
p=new(ArcNode);
p->adjvex=d;
p->nextarc=[s].firstarc;
[s].firstarc=p;
}
}
void Creat_adjgraphUDG(ALGraph &G)
{
int i,s,d;
ArcNode *p,*q;
课程设计题目九:图的广度优先遍历
基本要求:
采用邻接表存储结构实现图的广度优先遍历。
(2)对任意给定的图(顶点数和边数自定),建立它的邻接表并输出;
(3)实现图的广度优先遍历*/
#include<>
#include<>
#include<>
#define MAX_NUM 20
int visited[MAX_NUM]={0};
case UDG:Creat_adjgraphUDG(G);PRIN(G);break;
default:printf("ERROR");break;
}
}
void main()
{
ALGraph G;Creat_adjgraph(G);printf("\n");
printf("广度优先搜索遍历序列为:\n");
scanf("%d %d",&s,&d);
while(s<1||s>||d<1||d>
{
printf("编号超出范围,重新输入");
scanf("%d %d",&s,&d);}
s--;
d--;
p=new(ArcNode);
p->adjvex=d;
p->nextarc=[s].firstarc;
[s].firstarc=p;
int w,i;
for(i=0;i<;i++)visited[i]=0;
printf("%4d",v+1);
visited[v]=1;
rear=(rear+1)%MAX_NUM;
queue[rear]=v;
while(front!=rear)
{
front=(front+1)%MAX_NUM;
w=queue[front];
void Creat_adjgraphDG(ALGraph &G)
{
int i,s,d;
ArcNode *p=NULL,*q=NULL;=DG;
printf("请输入顶点数和边数:");
scanf("%d %d",&,&;
for(i=0;i<;++i)
{
printf("第%d个顶点信息:",i+1);
bfs(G,1);printf("\n");
}
p=[i].firstarc;
while(p!=NULL)
{
printf("%d\t",p->adjvex+1);
p=p->nextarc;}
printf("\n");}
}
}
void bfs(ALGraph &G,int v)
{
v--;
ArcNode *p;
int queue[MAX_NUM],front=0,rear=0;
=UDG;
printf("请输入顶点数和边数:");
scanf("%d %d",&,&;
for(i=0;i<;++i)
{
printf("第%d个顶点信息:",i+1);
scanf("%d",&[i].data);
[i].firstarc=NULL;}
for(i=0;i<;++i)
{
printf("第%d条边的起始顶点编号和终止顶点编号:",i+1);
{
VertexType data;
ArcNode *firstarc;
}VNode,AdjList[MAX_NUM];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;
GraphKind kind;
}ALGraph;
void PRIN(ALGraph &G);
q=new(ArcNode);
q-=[d].firstarc;
[d].firstarc=q;
}
}
void PRIN(ALGraph &G)
{
int i;
ArcNode *p;
if==DG||==UDG)
{
for(i=0;i<;++i)
{
printf("V%d:",[i].data);
void Creat_adjgraph(ALGraph &G);
void bfs(ALGraph &G,int v);
void Creat_adjgraphDG(ALGraph &G);
void Creat_adjgraphUDG(ALGraph &G);
void Creat_adjgraph(ALGraph &G);
}
printf("\n");
}
void Creat_adjgraph(ALGraph &G)
{
printf("1:有向图2:无向图\n");
printf("请根据上述提示输入图的类型:"
);
scanf("%d",&;
switch
{
case DG:Creat_adjgraphDG(G);PRIN(G);break;