深圳大学 数据结构 2017图
(完整word版)广东工业大学-数据结构试卷

5.线索二叉树的左线索指向其___________,右线索指向其___________。
6.已知无向图G =(V, E),其中V={a, b, c, d, e},E={(a,b),(a,d),(a,c),(d,c),(b,e)},若从顶点a开始遍历图,得到的序列为a,b,e,c,d,则采用的是___________遍历方法。
(5)26, 12, 3, 45, 61, 70, 87, 97;(6)________________________;
(7)3, 12, 26, 45, 61, 70, 87, 97;
四.算法阅读题(共24分)
1.(6分)阅读算法f1,并回答问题。
(1)设线性表L=(2, 3, 6, 5, 4),并采用带头结点的单链表储存,写出执行算法f1(L)后的L;
(2)简述算法f1(L)对线性表L的操作意义。
voidf1(LinkList &L){
LinkListp,s;
p=L->next;
L->next=NULL;
while(p!= NULL){
s=p->next;
p->next=L->next;
L->next=p;
p=s;
}
}
2.(6分)假设以带头结点的循环链表表示队列,并且只设一个指针rear指向队尾元素(注意不设头指针),算法f2实现相应的出队列操作。请在空缺处填入合适内容,使其成为完整的算法。
f3(bt->lchild, x);
f3(bt->rchild, x);
}
}
4.(6分)图的邻接表存储结构的类型定义如下:
山东科技大学数据结构与操作系统考研真题2017—2019年

同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。
(12 分)
《数据结构》部分
一、简答题(30 分,每题 5 分) 1、串、数组、广义表从元素间关系上可以看成线性结构,它们与 一般意义上的线性表相比有何特殊性? 2、借助栈可以实现更复杂的操作,请简述如何利用栈实现对表达 式中括号是否匹配的检验。 3、基于关键字比较的查找算法所能达到最优时间复杂度是?能否 设计一种与问题规模无关的查找算法?请给出基本思路。 4、图的广度优先遍历与树的何种遍历策略相似?请给出简单解释。 5、《数据结构》中经常采用“树形化组织”的方式来整理数据, 比如折半查找表、二叉排序树、大顶堆/小顶堆等,请简述这样 做的优点。 6、何为稳定的排序方法?何为不稳定的排序方法?哪些排序算法 是不稳定的?
①请画出该图; ②给出从顶点 3 开始的深度优先遍历序列; ③给出从顶点 4 开始的广度优先遍历序列。 3、假设有一个 10000*10000 的稀疏矩阵,期中 1%的元素为非零元 素,要求构造一个哈希表,完成以下任务。 ①设计哈希函数(根据给定非零元素的行值和列值确定其在哈
希表的位置); ②给出处理冲突的方法; ③简要分析该哈希表的查找效率。 4、设待排序的关键字序列为{13,7,16,45,36,27,17,6, 12,56},试分别完成以下任务: ①建小顶堆; ②给出以 13 为枢轴进行一趟快速排序的过程。 三、算法设计题(20 分,每题 10 分) 1、已知链表 A 和 B 分别表示元素递增的两个集合,试写一算法求 两个集合的交集,结果存放于链表 A 中。 2、已知二叉排序树采用二叉链表存储,试写一高效算法从小到大 输出二叉排序树中所有值小于 X 的结点的数据。
(2)如果在第一个时间单元(也就是到达时间为 1.0)期间,CPU 被
深圳大学《概率论与数理统计》2017-2018学年第一学期期末试卷A

深圳大学2017-2018学年第一学期期末试卷开/闭卷闭卷课程名称概率论与数理统计A/B卷A 学分3课程编号02811命题人(签字)审题人(签字)年月日题号得分评卷人一二三四五六七八九十基本题总分附加题第一部分基本题一、选择题(共6小题,每小题5分,满分30分。
在每小题给出的四个选项中,只有一个是符合题目要求的,把所选项前的字母填在题后的括号内)(每道选择题选对满分,选错0分)1.事件表达式A B的意思是()(A)事件A与事件B同时发生(B)事件A发生但事件B不发生(C)事件B发生但事件A不发生(D)事件A与事件B至少有一件发生答:选D,根据A B的定义可知。
2.假设事件A与事件B互为对立,则事件A B()(A)是不可能事件(B)是可能事件(C)发生的概率为1(D)是必然事件答:选A,这是因为对立事件的积事件是不可能事件。
3.已知随机变量X,Y相互独立,且都服从标准正态分布,则X2+Y2服从()(A)自由度为1的χ2分布(B)自由度为2的χ2分布(C)自由度为1的F分布(D)自由度为2的F分布答:选B,因为n个相互独立的服从标准正态分布的随机变量的平方和服从自由度为n的χ2分布。
4.已知随机变量X,Y相互独立,X~N(2,4),Y~N(-2,1),则()(A)X+Y~P(4)(B)X+Y~U(2,4)(C)X+Y~N(0,5)(D)X+Y~N(0,3)答:选C,因为相互独立的正态变量相加仍然服从正态分布,而E(X+Y)=E(X)+E(Y)=2-2=0, D(X+Y)=D(X)+D(Y)=4+1=5,所以有X+Y~N(0,5)。
5.样本(X1,X2,X3)取自总体X,E(X)=μ,D(X)=σ2,则有()(A)X1+X2+X3是μ的无偏估计(B)X1+X2+X3是μ的无偏估计322(C)X2是σ2的无偏估计⎛X+X2+X3⎫2(D) 1⎪是σ的无偏估计3⎝⎭答:选B,因为样本均值是总体期望的无偏估计,其它三项都不成立。
数据结构-所有章节测验-测验答案-慕课答案-UOOC优课-课后练习-深圳大学

数据结构章节测验数据结构第一章测验一、单选题 (共100.00分)1.在数据结构概念中, 数据的基本单位是()A.数据段B.数据项C.数据表D.数据元素正确答案:D2.在数据结构概念中, 结构是描述()A.数据项的类型B.数据元素之间的关系C.数据成员的先后顺序D.数据对象的取值范围正确答案:B3.在算法设计中, 要求算法便于理解和修改是属于算法要求的()A.正确性B.可读性C.健壮性D.效率高正确答案:B4.抽象数据类型ADT通过三方面描述, 包括数据对象、数据操作和()A.数据范围B.数据判断C.数据关系D.数据来源正确答案:C5.以下关于算法的描述, 哪个是正确的()A.算法可以没有输入B.算法可以包含无限个执行步骤C.算法可以没有输出D.算法的每个步骤允许带有歧义的正确答案:A6.在算法设计中, 要求算法满足具体问题的需求是属于算法要求的()A.正确性B.可读性C.健壮性D.效率高正确答案:A7.抽象数据类型ADT通过三方面描述, 包括数据关系、数据操作和()A.数据对象B.数据来源C.数据范围D.数据判断正确答案:A8.以下关于数据结构的描述, 哪一个是正确的()A.数据原子是数据的最小独立单位B.数据元素是数据的最小独立单位C.一个数据项可以包含若干个数据元素D.不能被计算机程序识别和处理的信息集合,不能称为数据正确答案:D9.设n为问题规模, 以下程序的时间复杂度为(...fo. (i=1.i<=10000.i++...fo.(j=1.j<=n.j++.........1;A.O(1)B.O(n)C.O(10000n)D.O(n2)正确答案:B10.设n为问题规模, 以下程序的时间复杂度为(.. fo.(i=1.i.POW(2.n).i++.//POW(x.y)函数表示x的y次...a+100;A.O(n)B.O(2n)C.O(n!)D.O(2n)正确答案:D数据结构第二章测验一、单选题 (共100.00分)1.以下结构中, 哪一个是属于逻辑结构()A.线性表B.顺序表C.单链表D.循环链表正确答案:A2.已知顺序表包含1000个数据, 现在第88号位置插入新的数据, 需要移动的数据个数为()A.88B.87C.912D.913正确答案:D3.若线性表最常用的操作是存取第i个元素及其后继的值,则最节省操作时间的存储结构是()A.单链表B.双链表C.单循环链表D.顺序表正确答案:D4.以下结构中, 哪一个是属于物理结构()A.线性表B. 栈C.单链表D.队列正确答案:C5.已知顺序表包含100个数据, 现在要删除第99号位置的数据, 需要移动的数据个数为()A.99B.100C. 1D. 2正确答案:C6.已知指针p指向单链表L的某个结点, 判断p指向的结点是尾结点的条件是()A.i.(p->next>p)B.i.(p->next==NULL)C.i.(p->nextD.i.(p->data==0)正确答案:B7.以下描述哪个是正确的()A.线性表的数据元素的存储位置一定是连续的B.顺序表的数据元素的存储位置一定是连续的C.链表的数据元素的存储位置一定不是连续的D.线性表的数据元素的存储位置一定不是连续的正确答案:B8.已知顺序表包含100个数据, 先在第15号位置插入1个新数据, 接着删除第3号位置的数据, 需要移动的数据总个数为()A.18B.84C.184D.188正确答案:C9.设某单链表包含10个结点, 已知指针p指向第3个结点, 指针q指向第4个结点, 删除第4个结点的语句为()A.p->nex..q->next.free(q);B.q->nex..p.free(p);C...q->next.free(p);D...p->next.free(q);正确答案:A10.设某单链表包含10个结点, 已知指针s指向一个新结点, 指针p指向第4个结点, 现在第4个结点之后插入这个新结点的两个语句为()A.p->nex..s.s->nex..p->next;B.s->nex..p->next.p->nex..s;C.p->nex..s->next.s->nex..p;D.s->nex..p.p->nex..s->next;正确答案:B数据结构第三章测验一、单选题 (共100.00分)1.以下结构中, 哪一个是属于逻辑结构()A.顺序栈B.链栈C.队列D.循环队列正确答案:C2.已知栈S为空, 数据1.2.3.4依次逐个进入栈S, 则栈顶数据为()A. 1B. 2C. 3D. 4正确答案:D3.已知队列为空, 数据1.2.3.4依次逐个进入队列, 则出队的数据顺序为()A.1234B.4321C.1324D.2413正确答案:A4.栈的最大特点是()A.先进先出B.后进先出C.无限递归D.有限递归正确答案:B5.队列的最大特点是()A.先进先出B.后进先出C.无限递归D.有限递归正确答案:A6.已知栈包含10元素, 其中存放在栈底是第1号元素, 则第10号元素可以通过()进行访问A.栈底B.栈中C.栈尾D.栈顶正确答案:D7.以下描述正确的是()A.顺序栈可以直接访问栈内任意位置的元素, 而链栈不可以B.链栈可以直接访问栈内任意位置的元素, 而顺序栈不可以C.通过栈可以实现程序的递归算法D.通过队列可以实现程序的递归算法正确答案:C8.以下结构中, 哪一个是属于物理结构()A. 栈B.队列C.链队列D.线性表正确答案:C9.使用长度为10的数组实现循环队列, 则该队列最多存储数据个数为()A. 1B. 9C.11.D.5正确答案:B10.在队列中, 允许插入的一端称为()A.队头B.队中C.队指针D.队尾正确答案:D数据结构第四章测验一、单选题 (共100.00分)1.以下结构中, 哪一个是属于逻辑结构()A.顺序表B.链栈C.循环队列D. 串正确答案:D2.以下哪一种是串在计算机中的常见表示方式()A.定长顺序B.堆分配C.块链D.前三种都是正确答案:D3.在数据结构中, 串可以等同于()的处理A.整数串B.浮点数串C.字符串D.多种类型的数组正确答案:C4.以下哪一种是串匹配的常用算法()A.普里姆算法B.克鲁斯卡尔算法C.KMP算法D.关键路径算法正确答案:C5.已知主串为abcbcaddabc, 模式串为cad, 假设串位置从1开始, 则串匹配位置是()A. 3B. 5C. 7D.不存在正确答案:B6.已知模式串为abaab, 则next数组为()A.1122B.22312C.1212D.1112正确答案:A7.已知串S的内容为1+2+3, 以下描述哪一个是正确的()A.串S的长度是6B.串S的运算结果是6C.整数1是串S的子串D.符号+是串S的子串正确答案:D8.以下描述哪一个是正确的()A.串是字符有限序列B.串是整数、浮点数、字符等多种数据的有限序列C.只包含空格的串称为空串D.串只能使用顺序表存储正确答案:A9.串的长度是指()A.串中包含不同字母的个数B.串中所含字符的个数C.串中包含不同字符的个数D.串中包含非空格的字符的个数正确答案:B10.串函数Sub(S.x.y)表示在串S中, 从x位置开始, 取出y个字符, 串位置从1开始计算。
王道数据结构 第七章 查找思维导图-高清脑图模板

每次调整的对象都是“最小不平衡子树”
插入操作
在插入操作,只要将最小不平衡子树调整平衡,则其他祖先结点都会恢复平衡
在A的左孩子的左子树中插入导致不平衡
由于在结点A的左孩子(L)的左子树(L)上插入了新结点,A的平衡因子由1增
至2,导致以A为根的子树失去平衡,需要一次向右的旋转操作。
LL
将A的左孩子B向右上旋转代替A成为根节点 将A结点向右下旋转成为B的右子树的根结点
RR平衡旋转(左单旋转)
而B的原左子树则作为A结点的右子树
在A的左孩子的右子树中插入导致不平衡
由于在结点A的左孩子(L)的右子树(R)上插入了新结点,A的平衡因子由1增
LR
至2,导致以A为根的子树失去平衡,需要两次旋转操作,先左旋转再右旋转。
将A的左孩子B的右子树的根结点C向左上旋转提升至B结点的位置
本质:永远保证 子树0<关键字1<子树1<关键字2<子树2<...
当左兄弟很宽裕时,用当前结点的前驱、前驱的前驱来填补空缺 当右兄弟很宽裕时,用当前结点的后继、后继的后继来填补空缺
兄弟够借。若被删除关键字所在结点删除前的关键字个数低于下限,且与此结点 右(或左)兄弟结点的关键字还很宽裕,则需要调整该结点、右(或左)兄弟结 点及其双亲结点及其双亲结点(父子换位法)
LL平衡旋转(右单旋转)
而B的原右子树则作为A结点的左子树
在A的右孩子的右子树中插入导致不平衡
由于在结点A的右孩子(R)的右子树(R)上插入了新结点,A的平衡因子由-1
减至-2,导致以A为根的子树失去平衡,需要一次向左的旋转操作。
RR
将A的右孩子B向左上旋转代替A成为根节点 将A结点向左下旋转成为B的左子树的根结点
《数据结构图论部分》PPT课件

Page 4
2020/11/24
哥尼斯堡七桥问题
能否从某个地方出发,穿过所有的桥仅一次 后再回到出发点?
Page 5
2020/11/24
七桥问题的图模型
欧拉回路的判定规则:
1.如果通奇数桥的地方多于
C
两个,则不存在欧拉回路;
2.如果只有两个地方通奇数
桥,可以从这两个地方之一
A
B 出发,找到欧拉回路;
V4 是有向边,则称该图为有向图。
Page 9
2020/11/24
简单图:在图中,若不存在顶点到其自身的边,且同 一条边不重复出现。
V1
V2
V3
V4
V5
非简单图
V1
V2
V3
V4
V5
非简单图
V1
V2
V3
V4
V5
简单图
❖ 数据结构中讨论的都是简单图。
Page 10
2020/11/24
图的基本术语
邻接、依附
DeleteVex(&G, v); 初始条件:图 G 存在,v 是 G 中某个顶点。 操作结果:删除 G 中顶点 v 及其相关的弧。
Page 34
2020/11/24
InsertArc(&G, v, w); 初始条件:图 G 存在,v 和 w 是 G 中两个顶点。 操作结果:在 G 中增添弧<v,w>,若 G 是无向的,则还
Page 2
2020/11/24
• 知识点
– 图的类型定义 – 图的存储表示 – 图的深度优先搜索遍历和广度优先搜索遍历 – 无向网的最小生成树 – 拓扑排序 – 关键路径 – 最短路径
Page 3
深圳大学 考研生物医学工程综合考试大纲

深圳大学考研生物医学工程综合考试大纲考试科目代码及名称:912生物医学工程综合包含数字电子技术基础部分(75分)和C语言程序设计(75分)两部分,总分150分。
一、数字电子技术基础部分1、考试基本要求本考试大纲适用于报考深圳大学生物医学工程专业的硕士研究生入学考试。
《数字电子技术基础》部分是为招收生物医学工程专业硕士生而设置的具有选拔功能的水平考试。
它的主要目的是测试考生对数字电子技术各项内容的掌握程度。
要求考生熟悉数字电路技术的基本概念和基本理论,掌握数字电路的基本分析和设计方法, 具有较强的数字逻辑推理、分析和设计能力。
2、考试内容和考试要求逻辑代数基础重点掌握逻辑代数的表达方式及其基本运算规律。
逻辑代数的基本定律和基本运算规律。
逻辑函数的各种表达方式。
利用逻辑代数和卡诺图对逻辑函数进行化简。
组合逻辑电路重点掌握组合逻辑电路的分析和设计原理。
组合逻辑电路分析和设计方法。
组合逻辑电路中的竞争-冒险及其消除。
数字集成电路的输入输出特性常用组合逻辑电路及MSI组合电路模块的应用掌握若干常用组合逻辑电路及MSI组合电路模块的功能及应用,包括编码器、译码器、加法器、比较器、数据选择器和数据分配器等。
组合逻辑的定义。
组合电路的分析方法和设计方法。
常用组合逻辑电路:编码器、译码器、数据选择器与分配器、全加器、加法器、数值比较器。
时序逻辑电路同步时序电路是时序电路的主要组成部分。
本部分内容包括了对于时序电路的一般描述方法和状态化简方法,重点在于同步时序电路的分析和设计。
要求掌握同步时序电路的基本设计过程。
首先介绍时序逻辑电路的基本结构和特点,触发器的电路结构和动作特点、触发器的逻辑功能和分类以及不同逻辑功能触发器间的转换,然后讲述了时序逻辑电路的分析方法和设计方法。
触发器的基本类型及其状态的描写。
触发器的转换。
触发器的简单应用。
时序逻辑的定义。
时序电路的描述与分析方法、分析步骤、分析工具(状态表、状态图、时序图)。
数据结构第5章课件 中国石油大学(华东)

二叉链表
leftChild
data rightChild
22
二叉树的链表表示(三叉链表)
每个结点增加一个指向双亲的指针parent,使 得查找双亲也很方便。
leftChild data parent rightChild
三叉链表
data
leftChild
27
BinTreeNode *LeftChild (BinTreeNode *current ) { return (current != NULL )? current->leftChild :NULL; } BinTreeNode *RightChild (BinTreeNode *current ) { return ( current!= NULL) ? current->rightChild : NULL; } int Height( ){return Height(root);} int Size( ){return Size(root);} BinTreeNode *GetRoot ( ) const { return root; } void preOrder( ) {preOrder(root);} //前序遍历 void inOrder( ) {inOrder(root);} //中序遍历 void postOrder( ) {postOrder(root);} //后序遍历 void levelOrder( ) ; // 不需要递归,所以直接对外接 口调用即可。层序遍历 28
b
f
c
d
g
6
e
a
b.嵌套集合表示法: b 根据树的集合定义,写出集合划分。 { a, {b,{e},{f}}, {c}, {d,{g}} } e c d
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• N={V,E},V={0,1,2,3,4,5},E={(0,1), (0,4), (0,5), (1,2), (1,3), (1,5), (2,3), (3,4), (3,5), (4,5)}
1 0 2 3 4 5
4
第一节 图的定义与术语
二、无向图(完全图) • 如果无向图有n(n-1)/2条边,称为无向完全图
0 1 0 0 1 0 1 1
0
1 0 1
0
1 1 0
0
5 4
22
第二节
图的存储结构
二、邻接表(Adjacency List) • 邻接表是图的一种链式存储结构 • 在邻接表中,每个顶点设置一个单链表,其每 个结点都是依附于该顶点的边(或以该顶点为 尾的弧)
23
第二节
图的存储结构
adjvex nextarc info
cin >> x; cin >> y; InsertLinkList(G, x, y); InsertLinkList(G, y, x); // 输入顶点1(或弧尾) // 输入顶点2(或弧头) // 在x单链表中,插入y结点 // 插入x结点(无向图)
结点
}}
30
第二节 图的存储结构
二、邻接表(创建—插入结点)
∞ 其它
第二节 图的存储结构
一、邻接矩阵(网络)
有向网N={V,E},V={0,1,2,3,4},
E={<0,1,5>,<0,3,7>,<0,4,15>,<1,2,5>,<2,4,1>,<3,2,2> }
E中每个元组的第三个元素表示权。 1、画出该网, 2、写出该网的邻接矩阵。
∞ ∞ ∞ ∞ ∞ 5 ∞ ∞ ∞ ∞ ∞ 5 ∞ 2 ∞ 7 ∞ ∞ ∞ ∞ 15 ∞ 1 ∞ ∞ 5 1 5 2 0 7 1 2 3 15 4
1 2
3 4 5 0 5
第一节 图的定义与术语
二、无向图 • 邻接点:如果(x,y)E,称x,y互为邻接点,即 x,y相邻接 • 依附:边(x,y)依附于顶点x,y
1 0 5 3
• 相关联:边(x,y)与x,y相关联
• 顶点的度:和顶点相关联的 边的数目,记为TD(x)
2
4
6
第一节 图的定义与术语
第二节 图的存储结构
一、邻接矩阵(Adjacency Matrix)
• 邻接矩阵:记录图中各顶点之间关系的二维数 组。 • 对于不带权的图,以1表示两顶点存在边(或 弧)(相邻接),以0表示两顶点不邻接,即 1 如果(i,j)E 或 <i,j>E 其它
16
A[i][j] =
0
第二节 图的存储结构
{
for (i=1; i<=G->VertexNum; i++) { cin >> G->AdjList[i].Vertex; // 输入顶点信息(字符) G->AdjList[i].NextArc=NULL; // 头顶点下一条边指针为空 } cin >> ArcNum; // 输入边(弧)数 for (i=1; i<=ArcNum; i++)
二、邻接表(无向图)
2 0 1 2 3 4 1 0 1 1 0 0 4 2 3 ^ 2 3 1 4 5 ^ 3 4 ^ 26 5 ^ 5 ^ 3 5 ^ 3 4
1
0
5
5
第二节 图的存储结构
二、邻接表(有向图)
0
1
1
2 ^
3
4 ^ 0
1 4 2 3 27
2
3 4 ^
4 ^
2 ^
第二节 图的存储结构
3 10
第一节 图的定义与术语
五、回路 • 回路或环:路径的开始顶点与最后一个顶点相 同,即路径中(x, vi1, vi2,…, vin, y),x=y • 简单路径:路径的顶点序列中,顶点不重复出 0 1 现
2 1到3是简单路径 (1,0,4,3) 3 5
4
1到1构成环 (1,0,4,3,1) 11
二、邻接表(网络)
0
1
1
2
5
5 ^
3
7
4 15 ^
2
3 4
4
2
1 ^
2 ^
5
0 7 1 2
15 4 3
1
5 2
28
第二节 图的存储结构
二、邻接表(定义)
typedef struct { // 定义图(采用邻接链表)
int
VertexNum;
// 顶点数
VexNode *AdjList; // 邻接表头指针
三、有向图(Digraph) • 用<x,y>表示从x到y的一条弧(Arc),且称x为 弧尾,y为弧头,
• N={V,E},V={0,1,2,3,4},E={<0,1>,<0,3>, <0,4>,<1,2>,<2,4>,<3,2> }
0 1 4 2 3 7
第一节 图的定义与术语
三、有向图(完全图) • 如果有向图有n(n-1)条边,则称为有向完全图
24
第二节 图的存储结构
二、邻接表(结点结构)
typedef struct VexNode { char Vertex; // 定义图的顶点 // 顶点
int
Weight;
// 边(弧)的权值
struct VexNode *NextArc;// 指向下一条边(弧)指针
} VexNode;
第二节 图的存储结构
二、邻接表(结点结构) • 边(弧)的结点结构 adjvex; // 该边(弧)所指向的顶点的位置 nextarc;// 指向下一条边(弧)指针 info; // 该边(弧)相关信息的指针或权值 • 顶点的结点结构 data firstarc data; // 顶点信息 firstarc;//指向第一条依附该顶点的边(弧)
第一节 图的定义与术语
六、连通 • 连通:如果顶点x到y有路径,称x和y是ቤተ መጻሕፍቲ ባይዱ通的 • 连通图:图中所有顶点都连通
1 2 3 连通图 0 5 1 0 4 2 3 非连通图 12
4
第一节 图的定义与术语
七、子图 设有两个图 G=(V, E) 和 G’=(V’, E’)。若 V’ V 且 E’E, 称图G’是图G的子图
数据结构
第七章 图
第一节 图的定义与术语
一、图的定义(Graph) • 图是由顶点集合(vertex)及顶点间的关系集合 组成的一种数据结构: Graph=( V, E ) 其中V = {x | x数据对象}是顶点的有穷非空集合 E是顶点之间关系的有穷集合,包括 E1 = {(x, y) | x, y V } 边的集合 或 E2 = {<x, y> | x, y V } 弧的集合
一、邻接矩阵 • 无向图的邻接矩阵为:
0 1 0 0 1 1 1 0 1 1 0 1 1 2 3 4 0 1 0 1 0 0 0 1 1 0 1 1 1 0 0 1 0 1 0 1 5 2 3 1 1 0 1 1 0
有向图的邻接矩阵为:
0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 0
2
第一节 图的定义与术语
交通图(公路、铁路) 1 4 顶点:地点 边:连接地点的公路 2 3 交通图中有单行道双行道,分别用有向边、无向边表示; 电路图 顶点:元件 0 1 边:连接元件之间的线路 通讯线路图 2 5 顶点:地点 3 4 边:地点间的连线
0
第一节 图的定义与术语
二、无向图(Undigraph) • 用(x,y)表示两个顶点x,y之间的一条边(edge)
第二节 图的存储结构
二、邻接表(创建—顶点对应的序号)
int GetVexNodeNo(Graph *G, char c) { // 找到字符对应的单链表序号 int j; for (j=1; j<=G->VertexNum; j++) if (G->AdjList[j].Vertex == c) break; return(j); }
1 2 3
0
5 4 2 3
0
4
13
第一节 图的定义与术语
八、生成树 • 一个连通图的生成树是一个极小连通子图,它 含有图中全部n个顶点,但只有足以构成一棵 树的n-1条边
1 2 3 4
0
5 2
1
0
5
3
4
14
第二节 图的存储结构
图的邻接矩阵存储表示法 图的邻接表表示法 图的逆邻接表表示法 图的十字链表表示法 图的邻接多重表表示法
有时在图的每条边上附上相关的数值,这种与图 的边相关的数值叫权。 权可以表示两个顶点之间的距离、耗费等具有某种 意义的数,若将图的每条边都赋上一个权,则称这种带 权图为网络。 在网络中,两个顶点如果不邻接,则被视为距离为 无穷大;
wi,j 如果(i,j)E 或 <i,j>E 19
A[i][j] =
0
1
2
8
第一节 图的定义与术语
三、有向图 • 邻接:如果<x,y>E,称x邻接到y,或y邻接自x • 相关联:弧<x,y>与x,y相关联 • 入度:以顶点为头的弧的 0 数目,记为ID(x) • 出度:以顶点为尾的弧的 1 4 数目,记为OD(x) • 度:TD(x)=ID(x)+OD(x) 2 3
9
第一节 图的定义与术语
四、路径(Path) • 路径:是一个从顶点x到y的顶点序列(x, vi1, vi2,…, vin, y)