考研数据结构_图

考纲

1.图的基本概念
(什么是图,图的术语)
2.图的存储和基本操作
(邻接矩阵,邻接表,十字链表(有向图),临界多重表(无向图))
3.图的遍历
(深搜 Depth First Search–DFS, 广搜 Breadt First Search–BFS)
4.图的应用
(最小生成树,最短路径,拓扑排序–AOV图,求关键路径–AOE)

大体的知识点都概括在这了,
明确
1.是什么(知识点定义),
2.为什么(这是知识点为了解决什么问题),
3.怎么用(知识点是怎么运作的)

1.图的基本概念

1.1图的定义
什么是图?(标准定义就不说了,毕竟这我是个人的笔记),顶点集合和边集合构成。。巴拉巴拉。。。
但易错点在于,一个图可以边都为空,但顶点不能为空;线性表可以是空表,树可以是空树,但没有空图一说。
1.2 基本术语
多了不扯,只谈易混淆的
1.简单图(数据结构只讨论简单图)
与之相对的是多重图,即不是多重图就是简单图,
简单图满足:
1)不存在重复的边 ,
2)不存在自己到自己的边(没有“自成环”,而不是没有回路)

2.简单路径,简单回路
这三者都是带简单啥的,注意区分;
顶点不重复出现的路径叫简单路径。
除了第一个顶点和最后一个顶点相同,其他顶点都不重复出现的回路叫简单回路。

3.连通、连通图、强连通图、连通分量、强连通分量
1)两个顶点之间有路径,这两个点就是连通的;
2)任意两个顶点都连通的图是连通图;强连通图是针对有向图的(两个顶点互相都有到对方的边)
3)图中的极大连通子图叫做连通分量。

4.极大连通子图、极小连通子图
1)极大连通子图就是连通分量。(不需包括所有顶点
2)极小连通子图又叫生成树,必须包括所有的顶点,边是n-1,加上一个边就有回路,删除一个边就不连通。

(选择题考点)

1)n个顶点的完全图的边数:无向图: n(n-1)/2 , 有向图边是二倍 : n(n-1)
2)非连通图边最情况:n-1个顶点先构成完全图, 再加一个边就是连通了。
3)连通图边最情况:那不就是树(生成树,即最小连通子图),边是 n-1 呗
4)有向强连通图边最少情况:一个环,边为n

2.图的存储及基本操作

这一节的考点
选择:邻接表和邻接矩阵的性质对比,时空复杂度对比。十字链表和邻接多重表考的浅。
综合:画出一个图的邻接矩阵或邻接表,判断度是多少,是否有边,A²矩阵啥意思。
算法:
1)这两个数据结构如何定义
2)邻接表改为邻接矩阵存储

2.1邻接矩阵
一维数组存顶点,二维数组存边(一条边依附的两个点);
二维数组就是矩阵,把有边的两个点对应的某行某列置为1,否则为0
(带权时∞或0表示不存在边)
存储结构定义
王道书上是用C写的,我也用C吧,(C++感觉比较简洁

typedef struct{
 VertexType Vex{Maxsize];    //定义了一个顶点类型的一维数组,(即顶点表)
 EdgeType Edge{Maxsize]{Maxsize];  //边类型的二维数组,(即邻接矩阵)
 int vexnum,arcnum; 		//顶点数和边数
}MGraph;

分析一波特点:
1.空间复杂度:明显用了二维数组: O(n²),
2.图用矩阵表示法是唯一的
3.无向图矩阵是对称的,可以压缩存储,但会失去随即存储特性。
4.适合稠密图

如何求度?
无向图:顶点 i 的度为 矩阵第i行非零元素者第i列的非零元素的个数;
时间复杂度 O(n)

有向图: 第i行是出度,第i列是入度,行列为度。(简写了,我能看懂就行)
时间复杂度 O(n)

A²[i][j]那一点的值 = 顶点 i 到 j 路径长度为2 的路径条数

2.2邻接表
为什么要搞一个邻接表出来,我有矩阵还不行吗?
矩阵很香,但是太浪费内存,而邻接表是顺序存顶点,链式存边,减少了浪费

邻接表的定义需要先构建两个结构体,顶点表节点,边表节点
边表即单链表,需要定义节点,(指向下一个节点的指针才能连成链)这我知道。
你个一维数组存储的顶点要定义啥结构体?要自行车?
顶点也需要指针! 即指向第一个边的指针,而且这个指针是边表结点指针类型

存储结构定义

1.(边表的定义)每一个顶点都会扯出来一条单链表,
邻接表:从该点指向其他点(出度为链表的元素个数)
逆邻接表:从其他点指向该点(入度为链表元素个数)

typedef struct ArcNode{ 		

 int adjvex;         //边表里的data存的啥,依附的顶点所在顶点表的下标
 				    //(依附了两个顶点,存哪个?)->这就是邻接表和逆邻接表的区别
 struct ArcNode *next; //指向下一个边节点的指针
}ArcNode;

2.顶点表(顺序表的定义)

typedef struct {
	VertextType data;    //顶点信息
	ArcNode * firstArc; //指向边表的第一个元素,(哪个是第一个邻接的边?都可)
}VNode,AdjList[Maxsize];

3.万事俱备,只欠临门一脚

typedef struct{
	AdjList[Maxsize];  //每一个点都扯出来一条单链表,全部顶点扯出来,就能完整的表达一个图
	int vexnum,arcnum; //点数和边数
}ALGraph;

分析一波特性:(对照着邻接矩阵
1.空间复杂度&

数据结构1800题1. 算法的计算量的大小称为计算的( )。【北京邮电大学2000 二、3 (20/8分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于( )【中科院计算所 1998 二、1 (2分)】 A.问题的规模 B. 待处理数据的初态 C. AB 3.计算机算法指的是(1),它必须具备(2) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 【南京理工大学 1999 一、1(2分) 【武汉交通科技大学 1996 一、1( 4分)】 4.一个算法应该是( )。【中山大学 1998 二、1(2分)】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.AC. 5. 下面关于算法说法错误的是( )【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决问题算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是( )【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为( )两大类。【武汉交通科技大学 1996 一 、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值