邻接表存储结构建立无向图
数据结构参考答案

简答一.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(总分: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章 图一 选择题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章图自测卷解答姓名班级题号一二三四五总分题分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)

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使用,怎样分配这部分存储空间,使得对任意一个栈,仅当这部分全满时才发生上溢。(为了尽量利用空间,减少溢出的可能,可采用栈顶相向,栈底分设两端的存储方式,这样,对任何一个栈,仅当整个空间全满时才会发生上溢。)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}。