邻接表存储结构建立无向图

合集下载

数据结构参考答案

数据结构参考答案

简答一.1、已知模式串pat=’ADABBADADA’,写出该模式串的next函数值和nextval值;2、模式匹配算法是在主串中快速寻找模式的一种有效的方法,如果设主串的长度为m,模式的长度为n,则在主串中寻找模式的KMP算法的时间复杂性是多少?如果,某一模式 P=’abcaacabaca’,请给出它的NEXT函数值及NEXT函数的修正值NEXTVAL之值。

3、已知模式串pat=“abaabc”,写出该模式串的next函数值和nextval值;4、给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。

二、(意思对即可,不一定是这种写法)1、数据结构按照逻辑结构分为哪四种结构,说出元素之间的关系?集合:无关系线性结构:一对一树形结构:一对多图形结构:多对多2、图形结构有几种存储结构?分别是什么存储结构?4种。

邻接矩阵,邻接表,十字链表,邻接多重表3、度数为2的树和二叉树有何区别?(1)度为2的树中至少有一个结点的度为2,而二叉树中没有这种要求。

(2)度为2的树不区分左右子树,而二叉树严格区分左右子树。

4、简述栈和队列的特点。

栈:是一种只能在一端进行插入或删除操作的线性表。

“后进先出”队列:是一种仅允许在表的一端进行插入操作,而在表的另一端进行删除操作的受限的线性表“先进先出”三(只是最终的结果,有的题可能需要中间步骤,自己完善一下)1、已知某有向图的顶点集合为{A,B,C,D,E,F},边集合为{〈A,B〉,〈A,C〉,〈A,E〉,〈C,F〉,〈E,D〉},画出该图的邻接表,以它为基写出深度优先、广度优先遍历序列(深度、广度遍历要求从结点A开始)。

深度:A B C F E D广度:A B C E F D2、设无向图G(如右图所示),给出该图的最小生成树上边的集合并计算最小生成树各边上的权值之和。

3、对下图所示的无向图,从顶点1开始,写出该图的深度优先遍历和广度优先遍历。

计算机专业基础综合数据结构(图)历年真题试卷汇编4

计算机专业基础综合数据结构(图)历年真题试卷汇编4

计算机专业基础综合数据结构(图)历年真题试卷汇编4(总分:58.00,做题时间:90分钟)一、综合题(总题数:7,分数:14.00)1.已知一图如下图所示:(1)写出全部拓扑排序;(2)以V1为源点,以V8为终点,给出所有事件允许发生的最早时间和最晚时间,并给出关键路径;(3)求V1结点到各点的最短距离。

【北京邮电大学2000五(15分)】__________________________________________________________________________________________正确答案:(正确答案:关键路径有3条,长17。

各事件允许发生的最早时间和最晚时间略。

V1→V2→V6→V8,V1→V3→V5→V7→V8,V1→V7→V8→V1→V4→V5→V8 (3)V1结点到其他各结点的最短距离为:2,3,6,12,10,15,16。

)2.(1)对于有向无环图,叙述求拓扑有序序列的步骤;(2)对于以下的图,写出它的四个不同的拓扑有序序列。

【南开大学1998二(12分)】__________________________________________________________________________________________ 正确答案:(正确答案:(1)对有向图,求拓扑序列步骤为: 1)在有向图中选一个没有前驱(即入度为零)的顶点并输出。

2)在图中删除该顶点及所有以它为尾的弧。

3)重复1)和2),直至全部顶点输出,这时拓扑排序完成;否则,图中存在环,拓扑排序失败。

(2)这里使用形式化描述方法,当有多个顶点可以输出时,将其按序从上往下排列,这样不会丢掉拓扑序列。

这里只画出从顶点1开始的所有可能的拓扑序列,从顶点3开始的拓扑序列可类似画出。

)3.有向图的拓扑排序能否用图的深度搜索模式来查找?若能,请简述方法;若不能,请简述原因。

【西北大学2000二、8(5分)】__________________________________________________________________________________________ 正确答案:(正确答案:图的深度优先遍历可用于拓扑排序。

第7章图练习题

第7章图练习题

第7章 图一 选择题1.图中有关路径的定义是( )A .由顶点和相邻顶点序偶构成的边所形成的序列B .由不同顶点所形成的序列C .由不同边所形成的序列D .上述定义都不是2.设无向图的顶点个数为n ,则该图最多有( )条边。

A .n-1B .n(n-1)/2C . n(n+1)/2D .0E .n 23.一个n 个顶点的连通无向图,其边的个数至少为( )A .n-1B .nC .n+1D .nlogn4.要连通具有n 个顶点的有向图,至少需要( )条边。

A .n-lB .nC .n+lD .2n5.n 个结点的完全有向图的弧的数目是( )A .n*nB .n*(n+1)C .n/2D .n*(n -l)6.一个有n 个结点的图,最少有( )个连通分量,最多有( )个连通分量。

A .0B .1C .n-1D .n7.在一个无向图中,所有顶点的度数之和等于所有边数( )倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( )倍。

A .1/2B .2C .1D .49.用邻接表存储图所用的空间大小( )A .与图的顶点数和边数都有关B .只与图的边数有关C .只与图的顶点数有关D .与边数的平方有关11.下列哪一种图的邻接矩阵是对称矩阵?( )A .有向图B .无向图C .AOV 网D .AOE 网12.图的BFS 生成树比DFS 生成树的树高( )A .小或相等B .小C .大或相等D .大13.当一个有N 个顶点的图用邻接矩阵A 表示时,顶点Vi 的度是( )A .∑=n i j i A 1],[B .∑=n j j i A 1],[C .∑=n i i j A 1],[D .∑∑==+n j n i i j A j i A 11],[],[15.下列说法不正确的是( )A .图的遍历是从给定的源点出发每一个顶点仅被访问一次B .遍历的基本算法有两种:深度遍历和广度遍历C .图的深度遍历不适用于有向图D .图的深度遍历是一个递归过程16.无向图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)},对该图进行深度优先遍历,得到的顶点序列正确的是( )。

数据结构作业答案第章图作业答案

数据结构作业答案第章图作业答案

第7章 图 自测卷解答 姓名 班级一、单选题(每题1分,共16分) 前两大题全部来自于全国自考参考书!( C )1. 在一个图中,所有顶点的度数之和等于图的边数的 倍。

A .1/2 B. 1 C. 2 D. 4 (B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的 倍。

A .1/2 B. 1 C. 2 D. 4 ( B )3. 有8个结点的无向图最多有 条边。

A .14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通图最少有 条边。

A .5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全图有 条边。

A .14 B. 28 C. 56 D. 112 (B )6. 用邻接表表示图进行广度优先遍历时,通常是采用 来实现算法的。

A .栈 B. 队列C. 树D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用 来实现算法的。

A .栈 B. 队列C. 树D. 图 ( )8. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是( D )9. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是A . 0 2 4 3 1 5 6 B. 0 1 3 5 6 4 2 C. 0 4 2 3 1 6 5 D. 0 1 3 4 2 5 6 ( )10. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A . 0 2 4 3 6 5 1 B. 0 1 3 6 4 2 5 C. 0 4 2 3 1 5 6 D. 0 1 3 4 2 5 6 (建议:0 1 2 3 4 5 6) ( C )11. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A . 0 2 4 3 1 6 5 B. 0 1 3 5 6 4 2 C. 0 1 2 3 4 6 5 D. 0 1 2 3 4 5 6A .0 2 4 3 1 5 6B. 0 1 3 6 5 4 2C. 0 4 2 3 1 6 5D. 0 3 6 1 5 4 2建议:先画出图,再深度遍历⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0100011101100001011010110011001000110010011011110( A )12. 已知图的邻接表如下所示,根据算法,则从顶点0出发不是深度优先遍历的结点序列是A.0 1 3 2 B. 0 2 3 1C. 0 3 2 1D. 0 1 2 3(A)14. 深度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(D)15. 广度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(A)16. 任何一个无向连通图的最小生成树A.只有一棵 B. 一棵或多棵 C. 一定有多棵 D. 可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。

第7章自测题与答案

第7章自测题与答案

第7章图自测卷解答姓名班级题号一二三四五总分题分1620241030100得分一、单选题(每题1分,共16分)(C)1.在一个图中,所有顶点的度数之和等于图的边数的倍。

A.1/2B.1C.2D.4(B)2.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A.1/2B.1C.2D.4(B)3.有8个结点的无向图最多有条边。

A.14B.28C.56D.112(C)4.有8个结点的无向连通图最少有条边。

A.5B.6C.7D.8(C)5.有8个结点的有向完全图有条边。

A.14B.28C.56D.112(B)6.用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A.栈B.队列C.树D.图(A)7.用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A.栈B.队列C.树D.图(C)8.已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是01111011001001A.02431561000100B.0136542C.042316511001101011010D.03615420001101建议:01342561100010(D)9.已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是A.0243156B.0135642C.0423165D.0134256(B)10.已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A.0243651B.0136425C.0423156D.0134256(建议:0123456)(C)11.已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是A.0243165B.0135642C.0123465D.01234561(D)12.已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是A.0132B.0231C.0321D.0123(A)13.已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是A.0321B.0123C.0132D.0312(A)14.深度优先遍历类似于二叉树的A.先序遍历B.中序遍历C.后序遍历D.层次遍历(D)15.广度优先遍历类似于二叉树的A.先序遍历B.中序遍历C.后序遍历D.层次遍历(A)16.任何一个无向连通图的最小生成树A.只有一棵B.一棵或多棵C.一定有多棵D.可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1.图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。

图练习与答案

图练习与答案

一、应用题1.首先将如下图所示的无向图给出其存储结构的邻接链表表示,然后写出对其分别进行深度,广度优先遍历的结果。

1题图答.深度优先遍历序列:125967384宽度优先遍历序列:123456789注:(1)邻接表不唯一,这里顶点的邻接点按升序排列(2)在邻接表确定后,深度优先和宽度优先遍历序列唯一(3)这里的遍历,均从顶点1开始2.给出图G:(1).画出G的邻接表表示图;(2).根据你画出的邻接表,以顶点①为根,画出G的深度优先生成树和广度优先生成树。

(3)宽度优先生成树3.在什么情况下,Prim算法与Kruskual算法生成不同的MST?答.在有相同权值边时生成不同的MST,在这种情况下,用Prim或Kruskal也会生成不同的MST4.已知一个无向图如下图所示,要求分别用Prim 和Kruskal 算法生成最小树(假设以①为起点,试画出构造过程)。

答.Prim 算法构造最小生成树的步骤如24题所示,为节省篇幅,这里仅用Kruskal 算法,构造最小生成树过程如下:(下图也可选(2,4)代替(3,4),(5,6)代替(1,5))5.G=(V,E)是一个带有权的连通图,则:(1).请回答什么是G 的最小生成树; (2).G 为下图所示,请找出G 的所有最小生成树。

28题图答.(1)最小生成树的定义见上面26题 (2)最小生成树有两棵。

(限于篇幅,下面的生成树只给出顶点集合和边集合,边以三元组(Vi,Vj,W )形式),其中W 代表权值。

V (G )={1,2,3,4,5} E1(G)={(4,5,2),(2,5,4),(2,3,5),(1,2,7)};E2(G)={(4,5,2),(2,4,4),(2,3,5),(1,2,7)}6.请看下边的无向加权图。

(1).写出它的邻接矩阵。

(2).按Prim 算法求其最小生成树,并给出构造最小生成树过程中辅助数组的各分量值。

辅助数组各分量值:7.已知世界六大城市为:(Pe)、纽约(N)、巴黎(Pa)、伦敦(L) 、东京(T) 、墨西哥(M),下表给定了这六大城市之间的交通里程:世界六大城市交通里程表(单位:百公里)(1).画出这六大城市的交通网络图;(2).画出该图的邻接表表示法;(3).画出该图按权值递增的顺序来构造的最小(代价)生成树.8.已知顶点1-6和输入边与权值的序列(如右图所示):每行三个数表示一条边的两个端点和其权值,共11行。

暨南大学硕士研究生统一入学考试自命题试题(网络空间安全)

暨南大学硕士研究生统一入学考试自命题试题(网络空间安全)

暨南大学硕士研究生统一入学考试自命题试题(网络空间安全)******************************************************************************************** 学科、专业名称:网络空间安全研究方向:网络空间安全083900四、简答题(40分)1. 简述逻辑结构的四种基本关系并画出它们的关系图。

(10分)2. 设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18} ,请写出二路归并排序的方法下,每趟排序结束后关键字序列的状态。

(6分)3. 设二维数组num[1….m, 1…n]含有m*n个整数,请分析判断数组中元素是否互不相同的算法的时间复杂度。

(8分)4. 已知图1所示的有向图,请给出(1)每个顶点的入度与出度;(2)邻接矩阵。

(10分)图1. 有向图5. 在一棵空的二叉排列树中依次插入关键字序列为12,7,17,11,16,2,13,9,21,4,请画出所得到的二叉排列树。

(6分)五、算法填空(共2小题,每空2分,共20分)1. 在汉诺塔(hanoi tower)游戏中,总共有3根柱子和n个大小不一样的盘子。

初始状态时n 个盘子从小到大堆叠在1号柱子,下面的递归算法伪代码能够将这n个盘子从1号柱子移动到3号柱子。

其中,该递归算法满足以下条件:(1)每次只移动1个盘子,(2)任何一个盘子只有当它上面没有堆放盘子时才能移动,(3)任何时刻在任何一个柱子上永远不能出现大盘子堆在小盘子之上的情况。

请在_________处填上适当内容,使其成为一个完整的算法。

hanoi(from, tmp, to, n){ if(n==1){move( (1) , (2) );return;}hanoi( (3) );printf ( "(%d,%d)", from, to );hanoi( (4) );return;}。

算法与数据结构重考复习题(0910)

算法与数据结构重考复习题(0910)
10.具有10个顶点的无向图,边的总数最多为(45)。有向图G用邻接矩阵A存储,则顶点i的入度等于A中( 第
i列1的元素之和 )。对于含n个顶点和e条边的图,采用邻接矩阵表示的空间复杂度为( O(n2) )。连通图
是指图中任意两个顶点之间(都连通的无向图 )。一个有n个顶点的无向连通图,它所包含的连通分量个数最
保持青春的秘诀,是有一颗不安分的心。
算法与数据结构重考复习题(0910)
一、单选题(斜体为答案)
1.数据结构被形式地定义为(D,R),其中D 是
A. 算法 B. 操作的集合 C. 数据元素的集合 D. 数据关系的集合
2.顺序表是线性表的
A. 顺序存储结构 B. 链式存储结构 C. 索引存储结构 D. 散列存储结构
5.已知栈的输入序列为1,2,3....,n,输出序列为a1,a2,...,an,a2=n的输出序列共有(n-1)种输出序列。
队列的特性是先入先出,栈的特性是(后入先出)。如果以链栈为存储结构,则出栈操作时必须判别(栈空 )。与顺序栈相比,链栈有一个明显的优势是( 不易出现栈满 )。
6.循环队列采用数组data[1..n]来存储元素的值,并用front和rear分别作为其头尾指针。为区分队列的满和空,约定:队中能够存放的元素个数最大为(n-l),也即至少有一个元素空间不用,则在任意时刻,至少可以知道一个空的元素的下标是(front) ;入队时,可用语句(rear=rear+1%n)求出新元素在数组data中的下标。
(3)双向链表:q=p->prior; temp=q->data; q->data=p->data;p->data=temp;
2.内存中一片连续空间(不妨设地址从1到m),提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任意一个栈,仅当这部分全满时才发生上溢。(为了尽量利用空间,减少溢出的可能,可采用栈顶相向,栈底分设两端的存储方式,这样,对任何一个栈,仅当整个空间全满时才会发生上溢。)

判别无向图中任意两个顶点之间是否存在长度为K的简单路径

判别无向图中任意两个顶点之间是否存在长度为K的简单路径

目录一、问题描述 (2)二、设计思路 (2)三、测试用例设计 (3)四、详细设计 (3)五、调试分析 (5)六、心得体会 (8)七、参考文献 (10)八、附录 (10)九、课程设计评定表 (15)一、问题描述题目: 判别无向图中任意两个顶点之间是否存在长度为K的简单路径。

初始条件:(1)采用邻接表作为存储结构。

(2)编写程序判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径。

(3)测试用例自己设计。

注释:简单路径,即其顶点序列中不含有重现的顶点二、设计思路●存储结构设计1.采用邻接表作为无向图的存储结构,即顶点序列用一维数组描述,每个顶点所连接的边用单链表存储。

2.增设一个一维数组,用于存储搜索简单路径时所访问的节点。

●主要算法设计步骤:1.创建无向图CreateMGaph(MGraph &G)①输入无向图的顶点数、边数。

②给各个顶点命名,采用字符型编号。

③输入每条边所连接的两个顶点,即各顶点间的相通性初始化。

④每输入一条边,则判断其合法性:In(SList &L,char a)。

若输入的顶点对中出现了②中没有的新顶点,则提示相应的出错信息,重新输入一条新的边。

2. 打印出邻接表:void print(MGraph G)以每一个顶点为头指针,打印出与该顶点相邻的所有顶点。

然后换行,顺次打印下面的顶点及其相邻点。

3.搜索任意给出的两个顶点间是否存在长度为K的简单路径若搜索成功则返回成功标志,否则返回失败标志:int Search(MGraph G,int x,int y,int k)。

三.测试用例设计1.输入的顶点数:52.输入的边数;63.各顶点名称:A,B,C,D,E4.各条边所对应的顶点对:(A,D)(A,E)(D,E)(D,B)(C,B)(C,E)5.输入要寻找的顶点对及其简单路径长度分别为:(A,D),4四、详细设计4.1 存储结构说明4.1.1邻接表的存储表示#define MAX_VERTEX_NUM 20 //宏定义,最大顶点数typedef struct ArcNode{ //边表结点int adjvex;struct ArcNode *nextarc;}ArcNode;typedef struct VNode{ //头结点char data;ArcNode *firstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedef struct{AdjList vertices;int n,e;}MGraph; //无向图4.1.2 标记访问过的顶点数组int visited[MAX_VERTEX_NUM]; //访问标志函数4.1.3 存储已访问过的顶点的数组int path[MAX_VERTEX_NUM];4.2 主要函数声明4.2.1 创建无向图void CreateMGaph(MGraph &G)4.2.2 寻找各个顶点的位置char GetValue(MGraph G,int i)4.2.3 判断新输入的顶点是否在图中int IsIn(MGraph G,char m)4.2.4 返回顶点的值char GetValue(MGraph G,int i)4.2.5 打印出邻接表void print(MGraph G)4.2.6 查找两顶点m,n之间是否存在长度为k的简单路径int Search(MGraph G,int x,int y,int k,int visited[],int path[],int d)4.3 主程序int main(){cout<<"--------------创建无向图------------"<<endl<<endl;CreateMGaph(G);cout<<"-----------打印邻接表----------------"<<endl<<endl;print(G);cout<<"----------------寻找长度为K的简单路径--------"<<endl<<endl;cout<<"寻找路径的两个顶点:";cin>>m>>n;cout<<"请输入想寻找的简单路径的长度:";cin>>k;Search(G,x,y,k,visited,path,-1);return 0;}五、调试分析5.1 程序的运行与调试5.1.1 设计程序所应考虑的因素该程序所要执行的操作是比较简单的,但细到微处却有很多要考虑的因素,如果不面面俱到,考虑全面,则会使运行过程过于简单,程序的功能不够完美。

Java实现无向图的建立与遍历

Java实现无向图的建立与遍历

Java实现⽆向图的建⽴与遍历⼀、基于邻接矩阵表⽰法的⽆向图 邻接矩阵是⼀种利⽤⼀维数组记录点集信息、⼆维数组记录边集信息来表⽰图的表⽰法,因此我们可以将图抽象成⼀个类,点集信息和边集信息抽象成类的属性,就可以在Java中描述出来,代码如下:1class AMGraph{23private String[] vexs = null; //点集信息45private int[][] arcs = null; //边集信息67 } 每⼀个具体的图,就是该类的⼀个实例化对象,因此我们可以在构造函数中实现图的创建,代码如下:1public AMGraph(int vexNum,int arcNum) { //输⼊点的个数和边的个数23this.vexs = new String[vexNum];4this.arcs = new int[vexNum][vexNum];56 System.out.print("请依次输⼊顶点值,以空格隔开:");7 Scanner sc = new Scanner(System.in);8for(int i = 0; i < vexNum; i++) { //根据输⼊建⽴点集9this.vexs[i] = sc.next();10 }1112for(int i = 0; i < vexNum; i++) { //初始化边集13for(int j = 0; j < vexNum; j++) {14this.arcs[i][j] = 0; //0表⽰该位置所对应的两顶点之间没有边15 }16 }1718 start:for(int i = 0; i < arcNum; i++) { //开始建⽴边集1920 sc = new Scanner(System.in);21int vex1Site = 0;22int vex2Site = 0;23 String vex1 = null;24 String vex2 = null;2526 System.out.print("请输⼊第" + (i+1) + "条边所依附的两个顶点,以空格隔开:");27 vex1 = sc.next();28 vex2 = sc.next();29for(int j = 0; j < this.vexs.length; j++) { //查找输⼊的第⼀个顶点的位置30if (this.vexs[j].equals(vex1)) {31 vex1Site = j;32break;33 }34if (j == this.vexs.length - 1) {35 System.out.println("未找到第⼀个顶点,请重新输⼊!");36 i--;37continue start;38 }39 }40for (int j = 0; j < this.vexs.length; j++) { //查找输⼊的第⼆个顶点的位置41if(this.vexs[j].equals(vex2)) {42 vex2Site = j;43break;44 }45if (j == this.vexs.length - 1) {46 System.out.println("未找到第⼆个顶点,请重新输⼊!");47 i--;48continue start;49 }50 }51if(this.arcs[vex1Site][vex2Site] != 0) { //检测该边是否已经输⼊52 System.out.println("该边已存在!");53 i--;54continue start;55 }else {56this.arcs[vex1Site][vex2Site] = 1; //1表⽰该位置所对应的两顶点之间有边57this.arcs[vex2Site][vex1Site] = 1; //对称边也置158 }59 }60 System.out.println("基于邻接矩阵的⽆向图创建成功!");61 sc.close();62 } 创建好图后,我们还要实现图的遍历。

数据结构填空题集锦

数据结构填空题集锦

数据结构填空题集锦一1. 数据结构是指数据及其相互之间的联系。

当结点之间存在M对N(M:N)的联系时,称这种结构为图或者是图的结构2. 队列的插入操作是在队列的尾进行,删除操作是在队列的首进行。

3. 当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件是top==0 (要超出才为满)。

4. 对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为O(1) ,在表尾插入元素的时间复杂度为O(n) 。

5. 设W为一个二维数组,其每个数据元素占用4个字节,行下标i从0到7 ,列下标j从0到3 ,则二维数组W的数据元素共占用128 个字节。

W中第6 行的元素和第4 列的元素共占用44 个字节。

若按行顺序存放二维数组W,其起始地址为100,则二维数组元素W[6,3]的起始地址为108 。

6.广义表A= (a,(a,b),((a,b),c)),则它的深度为3 ,它的长度为3 。

7. 二叉树是指度为2的有序树。

一棵结点数为N的二叉树,其所有结点的度的总和是n-1 。

8. 对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个有序序列有序列表。

对一棵由算术表达式组成的二叉语法树进行后序遍历得到的结点序列是该算术表达式的_后缀表达式后缀表达式(或列波兰式)。

9. 对于一棵具有n个结点的二叉树,用二叉链表存储时,其指针总数为___2n___个,其中____n-1___个用于指向孩子,___n+1____个指针是空闲的。

10.若对一棵完全二叉树从0开始进行结点的编号,并按此编号把它顺序存储到一维数组A 中,即编号为0的结点存储到A[0]中。

其余类推,则A[ i ]元素的左孩子元素为_2加一___,右孩子元素为_2加二___,双亲元素为__(i-1)/2__。

11.在线性表的散列存储中,处理冲突的常用方法有开放地址法和__ _链接法______两种。

12. 当待排序的记录数较大,排序码较随机且对稳定性不作要求时,宜采用快速_排序;当待排序的记录数较大,存储空间允许且要求排序是稳定时,宜采用____并归排序。

数据结构_图_采用邻接矩阵存储,构造无向图

数据结构_图_采用邻接矩阵存储,构造无向图

1.采用邻接矩阵(邻接表)存储,构造无向图(网)输入:顶点数、边数、顶点信息、边信息输出:图的顶点,图的边邻接矩阵(数组表示法)处理方法:用一个一维数组存储图中顶点的信息,用一个二维数组(称为邻接矩阵)存储图中各顶点之间的邻接关系。

假设图G=(V,E)有n个顶点,则邻接矩阵是一个n×n 的方阵,定义为:如果(vi,vj)属于边集,则edges[i][j]=1,否则edges[i][j]=0。

邻接表存储的处理方法:对于图的每个顶点vi,将所有邻接于vi的顶点链成一个单链表,称为顶点vi的边表(对于有向图则称为出边表),所有边表的头指针和存储顶点信息的一维数组构成了顶点表。

程序代码:#include<iostream>using namespace std;#define MAX_VERTEX_NUM 20 //最大顶点个数#define OK 1typedef int Status;//图的数组(邻接矩阵)存储表示typedef struct ArcCell { // 弧的定义int adj; // VRType是顶点关系类型。

// 对无权图,用1或0表示相邻否;// 对带权图,则为权值类型。

int *info; // 该弧相关信息的指针} ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct { // 图的定义char vexs[MAX_VERTEX_NUM];//顶点向量AdjMatrix arcs; // 邻接矩阵int vexnum, arcnum; // 图的当前顶点数、弧数} MGraph;int LocateV ex(MGraph G, char v){int a;for (int i = 0; i <= G.vexnum; i++){if (G.vexs[i] == v)a= i;}return a;}Status CreateUDN(MGraph &G) { //采用邻接矩阵表示法,构造无向网Gint i, j, k, w;char v1, v2;cout <<"输入顶点数,边数:"<< endl;cin >> G.vexnum >> G.arcnum;//IncInfo为0,表示各弧无信息cout <<"各顶点分别为:"<< endl;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].adj =NULL;}cout <<"顶点信息、边信息:"<< endl;for (k = 0; k<G.arcnum; k++) { //构造邻接矩阵cin >> v1 >> v2 >> w; //输入一条边依附的顶点及权值i = LocateV ex(G, v1); j = LocateV ex(G, v2);G.arcs[i][j].adj = w;G.arcs[j][i] = G.arcs[i][j];} return OK;} //CreateUDN (p162 算法7.2)Status printf1(MGraph G){cout <<"该图的顶点分别为:";for (int i = 0; i<G.vexnum; i++)cout << G.vexs[i] <<"";return OK;}Status printf2(MGraph G){cout <<"该图的边为:";for (int i = 1; i<G.vexnum; i++) //初始化邻接矩阵for (int j = 0; j<i; j++){if (G.arcs[i][j].adj !=NULL)cout << G.vexs[j]<< G.vexs[i] <<"," ;}return OK;}int main(){MGraph G;CreateUDN(G);printf1(G);cout << endl;printf2(G);cout << endl;system("pause");return 0;}。

邻接表和逆邻接表

邻接表和逆邻接表

邻接表和逆邻接表邻接表和逆邻接表是图论中常用的两种数据结构,它们分别用于存储有向图和无向图的邻居关系,是算法设计和优化中最常用的数据结构之一。

下面,我们将分别介绍邻接表和逆邻接表的定义、构建和应用。

一、邻接表邻接表是一种用于表示有向图和无向图的数据结构,实际上就是将图中的每个结点与其相邻结点关联起来,并存储在一个链表中。

因此,邻接表的基本结构是一个链表数组,其中每个链表代表一个结点和其邻居结点的关系。

邻接表一般可以通过以下步骤进行构建:1. 定义一个链表数组,数组的长度等于图中结点的个数;2. 遍历图中每个结点,将每个结点与其直接相连的结点添加到该结点对应的链表中;3. 添加完毕后,邻接表即构建完成。

邻接表的应用非常广泛,例如:1. 求解最短路径:通过遍历邻接表中的每个结点,可以找到从起点到终点的最短路径;2. 求解连通分量:通过遍历邻接表,可以找到有多少个连通分量,并输出每个连通分量的结点集合;3. 拓扑排序:通过邻接表和入度数组即可实现拓扑排序算法等等。

二、逆邻接表逆邻接表是指有向图中每个结点的入度集合,即表示指向某个节点的所有其他节点的集合。

逆邻接表的构建比较简单,只需要将邻接表反向,即将有向图的每个结点的所有入边指向相应的出边即可。

逆邻接表同样有着广泛的应用,例如:1. 求解强连通分量:通过遍历逆邻接表,可以求解图中的所有强连通分量;2. 拓扑排序:通过逆邻接表和入度数组,即可实现基于反向边的拓扑排序算法;3. 最短路径算法优化:当搜索从终点到起点时,通过使用逆邻接表,可以加速搜索过程。

总的来说,邻接表和逆邻接表是在图论中应用非常广泛的两种数据结构。

我们可以运用它们构建和优化各种算法,从而提高程序效率。

因此,熟练掌握邻接表和逆邻接表的概念、构建方法和应用场景是每一个程序员必备的技能。

带答案的数据结构补充习题

带答案的数据结构补充习题

补充习题第一章——第五章一、单选或填空题1. 下列程序段中S语句的执行频度为n(n-1)/2 。

for(i=0;i<n;i++ )for(j=0;j<i;j++ )S;2. 下列算法的时间复杂度是(O(n))。

for(i=0;i<n;i++ )c[i]=i;3. 算法的时间复杂度可表示为常数阶O(1)、线性阶O(n) 、平方阶O(n2)、对数阶O(logn)和指数阶O(2n)等。

4 以下关于数据结构的基本概念中,叙述正确的是CA) 数据元素是数据不可分割的最小单位。

B) 数据是数据对象的子集。

C) 数据元素之间的关系在计算机中可用顺序映像和非顺序映像两种不同的方法表示。

D) 数据结构在计算机中的表示又称为逻辑结构。

5. 在数据结构中,数据的逻辑结构包括(A)。

线性结构和非线性结构B) 逻辑结构和物理结构顺序结构和链式结构D) 虚拟结构和抽象结构6. 在数据结构中,数据的存储结构包括 C 。

线性结构和非线性结构B) 逻辑结构和物理结构C) 顺序结构和链式结构D) 虚拟结构和抽象结构7. 线性结构的数据元素之间存在一种( D )。

A.一对多关系B.多对多关系C.多对一关系D.一对一关系8. 在长度为n的顺序表中插入一个元素,需要平均移动A个元素。

A) n/2 B)nC) n(n-1) D) n(n+1)9. 在有n个元素的顺序表中做插入、删除运算,平均时间复杂度为O(n)。

10. 顺序表中逻辑上相邻的元素物理位置B 相邻,单链表中逻辑上相邻的元素的物理位置相邻。

A)必然、必然B)必然、不一定C)不一定、必然D)不一定、不一定11.相对于顺序存储而言,链式存储的优点是(C)。

A.随机存取B.节约空间C.增、删操作方便D.节点间关系简单12 以下关于头结点的描述中,叙述错误..的是AA) 头结点是对链表首元结点的别称B) 若链表中附设头结点,则头指针一定不为空C) 头结点中不存储链表的数据元素,而是一些诸如表长之类的辅助信息D) 在单链表中附设头结点,插入或删除首元素时不必进行特殊处理13.已知L是无表头结点的单链表,且P所指结点既不是首元结点,也不是尾元结点,则在P之后插入S所指结点,则执行(A)。

计算机专业基础综合数据结构图历年真题试卷汇编7_真题无答案

计算机专业基础综合数据结构图历年真题试卷汇编7_真题无答案

计算机专业基础综合数据结构(图)历年真题试卷汇编7(总分62, 做题时间90分钟)7. 设计题1.已知连通图如下:(1)若从顶点B出发对该图进行遍历,在(1)的基础上分别给出本图的按深度优先搜索和按广度优先搜索的顶点序列;(2)写出按深度优先搜索的递归程序。

【厦门大学200l三(12%分)】SSS_TEXT_QUSTI2.设计算法以实现对无向图G的深度遍历,要求:将每一个连通分量中的顶点以一个表的形,式输出。

例如,下图的输出结果为:(1,3)(2,6,7,4,5,8)(9,10)。

注:本算法中可以调用以下几个函数:firstadj(g,1,)——返回图g中顶点v的第一个邻接点的号码,若不存在,则返回0。

nextadj(g,v,w)——返回图g中顶点v的邻接点中处于w之后的邻接点的号码,若不存在,则返回0。

nodes(g)——返回图g中的顶点数。

【合肥工业大学2000五、4(8分)】SSS_TEXT_QUSTI3.请设计一个图的抽象数据类型(只需要用类Pascal或类C/C++语言给出其主要功能函数或过程的接口说明,不需要指定存储结构,也不需要写出函数或过程的实现方法),利用抽象数据类型所提供的函数或过程编写图的广度优先周游算法。

算法不应该涉及具体的存储结构,也不允许不通过函数或过程而直接引用图结构的数据成员,抽象数据类型和算法都应该加足够的注释。

【北京大学1999二、1(10分)】SSS_TEXT_QUSTI4.设计算法以判断给定的无向图G中是否存在一条以网为起点的包含所有顶点的简单路径,若存在,返回TRUE,否则,返回FALSE(注:本算法中可以调用以下几个函数:FIRSTADJ(G,V)——返回图G中顶点V的第一个邻接点的号码,若不存在,则返回0;NEXTADJ(G,W)——返回图G中顶点V的邻接点中处于W之后的邻接点的号码,若不存在,则返回0;NODES(G)——返回图G中的顶点数)。

【合肥工业大学1999五、5(8分)】SSS_TEXT_QUSTI5.已有邻接表表示的有向图,请编程判断从第u顶点至第v顶点是否有简单路径,若有,则印出该路径上的顶点。

数据结构考试试题及答案

数据结构考试试题及答案

数据结构考试试题及答案2009-05-12 09:22计科2班期中考试题答案提交说明:写清题号,以word文本格式保存,文件名命名规则为:姓名+学号,放到ftp://192.168.130.50的“计科2班考试”文件夹中。

一.填空题(每题1分,共10分)(1)已知一个顺序存储的线性表,设每个结点需占m个存储单元,若第0个元素的地址为address,则第i 个结点的地址是(address+i*m)。

(2)线性表有两种存储结构:顺序存储结构和链式存储结构,就两种存储结构完成下列填空:(顺序存储结构)存储密度较大,(链式存储结构)存储利用率较高,(顺序存储结构)可以随机存取,(链式存储结构)不可以随机存取,(链式存储结构)插入和删除操作比较方便。

(3)顺序表中逻辑上相邻的元素在物理位置上(也相邻),在链表中逻辑上相邻的元素的物理位置(不一定)相邻。

(4)在一个长度为n的顺序表中,在第i个元素(0<=i<=n)之前插入一个新元素时须向后移动(n-i+1 )个元素。

(5)在顺序表la的第i个元素前插入一个新元素,则有效的i值范围是(0 <=i<=length -1 );在顺序表lb的第j个元素之后插入一个新元素,则j的有效范围是(0 <= j<=length-1);要删除顺序表lc的第k个元素,则k的有效范围是(0 <=k<=length-1 )。

(6)设有一个空栈,现有输入序列为1,2,3,4,5,经过操作序列push , pop , push , push , pop,push ,push ,pop 后,现在已出栈的序列是1,3,5 ,栈顶元素的值是 4 。

(7)设有栈S ,若线性表元素入栈顺序为1,2,3,4,得到的出栈序列为1,3,4,2,则用栈的基本运算Push, Pop描述的操作序列为push , pop, push, push , pop, push , pop, pop。

数据结构第7章习题答案

数据结构第7章习题答案

第7章 《图》习题参考答案一、单选题(每题1分,共16分)( C )1. 在一个图中,所有顶点的度数之和等于图的边数的倍。

A .1/2 B. 1 C. 2 D. 4 (B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A .1/2 B. 1 C. 2 D. 4 ( B )3. 有8个结点的无向图最多有条边。

A .14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通图最少有条边。

A .5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全图有条边。

A .14 B. 28 C. 56 D. 112 (B )6. 用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A .栈 B. 队列 C. 树 D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A .栈 B. 队列 C. 树 D. 图( C )8. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是( D )9. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是A . 0 2 4 3 1 5 6 B. 0 1 3 5 6 4 2 C. 0 4 2 3 1 6 5 D. 0 1 23465 ( D )10. 已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是( A )11. 已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是A .0 2 4 3 1 5 6B. 0 1 3 6 5 4 2C. 0 1 3 4 2 5 6D. 0 3 6 1 5 4 2⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0100011101100001011010110011001000110010011011110A .0 1 3 2 B. 0 2 3 1 C. 0 3 2 1 D. 0 1 2 3A.0 3 2 1 B. 0 1 2 3C. 0 1 3 2D. 0 3 1 2(A)12. 深度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(D)13. 广度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(A)14. 任何一个无向连通图的最小生成树A.只有一棵 B. 一棵或多棵 C. 一定有多棵 D. 可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。

数据结构设计无向图

数据结构设计无向图

数据结构课程设计——无向图学校专业班级姓名学号任课教师题目3:以邻接链表的方式确定一个无向网,完成:⑴建立并显示出它的邻接矩阵;⑵对该图进行广度优先遍历,显示遍历的结果,(并随时显示队列的入、出情况);⑶普里姆算法构造其最小生成树,随时显示其构造的过程;⑷用克鲁斯卡尔算法构造其最小生成树,随时显示其构造的过程。

一、需求分析1.运行环境:Microsoft Visual Studio 20122.程序所实现的功能:a)建立并显示图的邻接矩阵;b)广度优先遍历该图,显示遍历结果;c)用普里姆算法构造该图的最小生成树,显示构造过程;d)用克鲁斯卡尔算法构造该图的最小生成树,显示构造过程。

3.程序的输入,包含输入的数据格式和说明:a)输入顶点数,及各顶点信息(数据格式为整形);b)输入弧以及其权值(数据格式为整形)。

1.程序的输出,程序输出的形式:a)输出图的邻接矩阵;b)广度优先遍历结果;c)普里姆算法构造最小生成树的结果;d)克鲁斯卡尔算法构造最小生成树的结果。

2.测试数据,如果输入的数据量较大,需要给出测试数据:a)顶点个数:5b)各个顶点为:A B C D Ec)输入所有的弧(格式为“顶点顶点权值”)为:A B 10 A C 4 B D 3 C D 5 B E 6 D E 9二、设计说明算法设计的思想:建立图类,建立相关成员函数。

最后在主函数中实现。

具体成员函数的实现请参看源程序。

在本次的设计中,我采用的是多文件的编程方式。

每个类写成了一个头文件。

这样有助于阅读和查看源程序。

1.邻接链表:邻接链表是一种链式存储结构。

在邻接链表中,对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点Vi的边(对有向图是以顶点Vi为尾的弧)。

每个结点由3个域组成,其中邻接点域指示与顶点Vi邻接的点在图中的位置,链域指示下一条边或弧的结点;数据域存储和边或弧相关的信息,如权值等。

所以一开始必须先定义邻接链表的边结点类型以及邻接链表类型,并对邻接链表进行初始化,然后根据所输入的相关信息,包括图的顶点数、边数、是否为有向,以及各条边的起点与终点序号,建立图的邻接链表。

第7章图_数据结构

第7章图_数据结构

v4
11
2013-8-7
图的概念(3)
子图——如果图G(V,E)和图G’(V’,E’),满足:V’V,E’E 则称G’为G的子图
2 1 4 3 5 6 3 5 6 1 2
v1 v2 v4 v3 v2
v1 v3 v4
v3
2013-8-7
12
图的概念(4)
路径——是顶点的序列V={Vp,Vi1,……Vin,Vq},满足(Vp,Vi1),
2013-8-7 5
本章目录
7.1 图的定义和术语 7.2 图的存储结构

7.2.1 数组表示法 7.2.2 邻接表 ( *7.2.3 十字链表 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4.1 图的连通分量和生成树 7.4.2 最小生成树
*7.2.4 邻接多重表 )
7.3 图的遍历
连通树或无根树
无回路的图称为树或自由树 或无根树
2013-8-7
18
图的概念(8)
有向树:只有一个顶点的入度为0,其余 顶点的入度为1的有向图。
V1 V2
有向树是弱 连通的
V3
V4
2013-8-7
19
自测题
7. 下列关于无向连通图特性的叙述中,正确的是
2013-8-7
29
图的存贮结构:邻接矩阵
若顶点只是编号信息,边上信息只是有无(边),则 数组表示法可以简化为如下的邻接矩阵表示法: typedef int AdjMatrix[MAXNODE][MAXNODE];
*有n个顶点的图G=(V,{R})的邻接矩阵为n阶方阵A,其定 义如下:
1 A[i ][ j ] 0
【北方交通大学 2001 一.24 (2分)】
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//算法功能:采用邻接表存储结构建立无向图
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define NULL 0
#define MAX_VERTEX_NUM 20 // 最大顶点数
typedef int Status; //函数的类型,其值是函数结果状态代码
typedef char VertexType;
typedef int VRType;
typedef int InforType;
typedef struct ArcNode
{
int adjvex; //该边所指的顶点的位置
struct ArcNode *nextarc; //指向下一条边的指针
int weight; //边的权
}ArcNode; //表的结点
typedef struct VNode
{
VertexType data; //顶点信息(如数据等)
ArcNode *firstarc; //指向第一条依附该顶点的边的弧指针}VNode, AdjList[MAX_VERTEX_NUM]; //头结点
typedef struct ALGraph
{
AdjList vertices;
int vexnum, arcnum; //图的当前顶点数和弧数
}ALGraph;
//返回顶点v在顶点向量中的位置
int LocateVex(ALGraph G, char v)
{
int i;
for(i = 0; v != G.vertices[i].data && i < G.vexnum; i++)
;
if(i >= G.vexnum)
return -1;
return i;
}
//构造邻接链表
Status CreateUDN(ALGraph &G)
{
int j;
ArcNode *s, *t;
printf("输入无向图顶点数: ");
scanf("%d", &G.vexnum);
printf("输入无向图边数: ");
scanf("%d", &G.arcnum);
getchar();
for(int i = 0; i < G.vexnum; i++)
{
printf("输入第%d个顶点信息:", i+1);
scanf("%c", &G.vertices[i].data); //构造顶点向量
G.vertices[i].firstarc = NULL;
getchar();
}
char v1, v2;
for(int k = 0; k < G.arcnum; k++)
{
printf("输入第%d 条边依附的顶点v1: ", k+1);
scanf("%c", &v1);
getchar();
printf("输入第%d 条边依附的顶点v2: ", k+1);
scanf("%c", &v2);
getchar();
int i = LocateVex(G, v1);
int j = LocateVex(G, v2); //确定v1 , v2在G中的位置
s = (ArcNode*) malloc (sizeof(ArcNode));
t = (ArcNode*) malloc (sizeof(ArcNode));
s->adjvex = j; //该边所指向的顶点的位置为j
s->nextarc = G.vertices[i].firstarc;
G.vertices[i].firstarc =s;
t->adjvex = i; //该边所指向的顶点的位置为j
t->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc =t;
}
return OK;
}
Status PrintAdjList(ALGraph &G)
{
ArcNode *p;
printf("%4s%6s%12s\n", "编号", "顶点", "相邻边编号");
for(int i = 0; i < G.vexnum; i++)
{
printf("%4d%6c", i, G.vertices[i].data);
for(p = G.vertices[i].firstarc; p; p = p->nextarc)
printf("%4d", p->adjvex);
printf("\n");
}
return OK;
}
int main()
{
ALGraph G;
CreateUDN(G);
rintAdjList(G);
return 0;
}。

相关文档
最新文档