首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

5.2.4 邻接多重

邻接多重时无向的另一种链式存储结构。 在邻接中,容易求得顶点和边的各种信息,但在邻接中求两个顶点之间是否存在边,或需要对边执行删除等操作时,需要分别在两个顶点的边中遍历,效率较低。...与十字链表类似,在邻接多重中,每一条边用一个结点表示,其结构如下图: mark ivex ilink jvex jlink info 其中,mark为标志域,可以用以标记该条是否被搜索过;ivex...在邻接多重中,所有依附于同一顶点的边串联在同一链表中,由于每条边依附于两个顶点,则每个边结点同时链接在两个链表中。...顶点信息 ArcNode *firstedge;//指向第一条依附该顶点的边 }VNode; typedef struct{ VNode adjmulist[MaxVertexNum];//邻接...int vexnum ,arcnum;//图的顶点数和弧数 }AMLGraph;//AMLGraph 是以邻接存储的图类型

92710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    邻接

    邻接矩阵缺点: 邻接矩阵是不错的存储结构,但是我们发现,对于边数相对于顶点较少的图,这种结构是存在对存储空间的极大浪费的 因此在处理稀疏图时,可以采用下面将要介绍的邻接 ? ? 无向图的邻接 ?...有向图的邻接 ? ? ? 网图的邻接 ? 邻接存储有向图的类 ? 有向图邻接的构造函数初始化操作 ? ? ? 邻接的构造函数和输出函数代码实现 ?...因为邻接来查询某个顶点的入度非常繁琐,因此为了解决查找入度麻烦的问题,引出了逆邻接 ?...v0有两个入边,所以在vo的firstin指向v1后,v1的headlink指向v2,v2后再无v0的入边,所以其taillink为空 邻接多重—解决无向图中边存储两次的重复问题 ?...邻接矩阵和邻接性能比较 ?

    62510

    邻接邻接矩阵

    邻接邻接矩阵是图的两种常用存储表示方式,用于记录图中任意两个顶点之间的连通关系,包括权值。对于图 而言,其中 表示顶点集合, 表示边集合。...邻接无向图 graph 表示?有向图 digraph 表示?若采用邻接表表示,则需要申请|V|个列表,每个列表存储一个顶点出发的所有相邻顶点。...因为需要申请大小为|V的数组来保存节点,对节点分配序号,所以需要申请大小为|V的额外存储空间,即邻接方式的存储空间复杂度为O(|V|+|E|)。邻接矩阵无向图 graph 表示?...两种存储结构对比根据邻接邻接矩阵的结构特性可知,当图为稀疏图、顶点较多,即图结构比较大时,更适宜选择邻接作为存储结构。...代码附录邻接结构# graph node definitionclass Node(object): def __init__(self, index, weight, next = None)

    1.9K00

    邻接详解(CC++)

    d ,其邻接点的存储下标为0、2、3,将其放入节点b 后面的单链表中; • 节点c 的邻接点是节点b、d ,其邻接点的存储下标为1、3,将其放入节点c 后面的单链表中; • 节点d 的邻接点是节点a、b...在上图中,节点数n =5,边数e =7,则在该图的邻接中,节点有5个节点,邻接有7个节点。节点a 的出度为3,其后面单链表中的节点数为3;节点c 的出度为2,其后面单链表中的节点数为2。...例如在下图中,节点c 的下标为2,在邻接中有两个为2的节点,因此节点c 的入度为2;节点e 的下标为4,在邻接中有3个为4的节点,因此节点e 的入度为3。...其邻接点的存储下标为0、1,按照头插法将其放入节点c 后面的单链表中; • 节点d 的逆邻接点是节点c ,其邻接点的存储下标为2,将其放入节点d 后面的单链表中; • 节点e 的逆邻接点是节点a、c、d...在上图中,节点数n =5,边数e =7,在该图的邻接中,节点有5个节点,邻接有7个节点。节点a 的入度为其后面的单链表中的节点数0,节点c 的入度为其后面的单链表中的节点数2。

    66420

    5.2.2 邻接

    的头指针和顶点的数据信息采用顺序存储(称为顶点),所以在邻接中存在两种结点:顶点结点和边结点。...顶点结点由顶点域(data)和指向第一条邻接边的指针(firstarc)构成 边邻接)结点由结点域(adjvex)和指向下一条邻接边的指针域(nextarc)构成。...③优点:在邻接中,给定一顶点,能很容易地找出它的所有邻边,因为只需要读取它的邻接就可以了。在邻接矩阵中,相同的操作则需要扫描一行,花费的时间为O(n)。...④在有向图的邻接表表示中,求一个给定顶点的出度只需计算其邻接中的结点个数即可;但求其顶点的入度,则需要遍历全部的邻接。因此,也有人采用逆邻接的存储方式来加速求解给定顶点的入度。...当然,这实际上与邻接存储方式是类似的。 ⑤图的邻接表表示并不唯一,这是因为在每个顶点对应的单链表中,各边结点的链接次序可以是任意的,取决于建立邻接的算法以及边的输入次序。

    73130

    多重(广义

    可能会有人发现一个小小的问题,就是为什么我又将广义叫作多重呢?...这其实只是一个理解角度的不同而带来的不同叫法罢了,多重这种叫法想表达的主要意思是中的元素可以是另一个,而这另一个中的元素又可以是一个,相当于“一重又一重”的,所以叫多重。...对于这样的应用场景,显然需要使用到一个多重,准确的说是一个二维的多重,其中一维表示课程,另一维表示学生,就像下面的图。那么提到二维的多重,我们脑海中最先浮现的应该就是二维数组了? ?...(存储学生选课的抽象的二维多重,横向代表学生A,B,C……纵向代表课程1,2,3……,若某一项打勾则表示该学生选了该课程,比如若A1打勾则表示学生A选择了课程1) 但是,现在情况有了新条件,这一所大学我们知道三个信息...所以我们现在需要的就是一个“不那么浪费空间”的二维多重

    1.1K20

    数据结构(八):邻接邻接矩阵

    邻接邻接矩阵是图的两种常用存储表示方式,用于记录图中任意两个顶点之间的连通关系,包括权值。 对于图 而言,其中 表示顶点集合, 表示边集合。...对于无向图 graph,图的顶点集合和边集合如下: graph 对于有向图 digraph,图的顶点集合和边集合如下: digraph 邻接 无向图 graph 表示 graph_adjacency_list...即邻接方式的存储空间复杂度为 。...两种存储结构对比 根据邻接邻接矩阵的结构特性可知,当图为稀疏图、顶点较多,即图结构比较大时,更适宜选择邻接作为存储结构。...代码附录 邻接结构 # graph node definition class Node(object): def __init__(self, index, weight, next = None

    1.5K30

    C语言 | 指针数组与多重指针

    C语言什么是指针数组 在C语言中一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。...C语言指向指针数据的指针 //定义一个指向指针数据的指针变量: char **point; point的前面有两个*号。...C语言指针数组作main函数的参数 main函数的第一行一般写成 int main() 或 int main(void) 括号中是空的或void,表示main函数没有参数,调用main函数时不必给出实参...以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C语言学习路线    C语言开发工具 VC6.0、Devc++、VS2019使用教程...100道C语言源码案例请去公众号:C语言入门到精通

    1.8K20

    C语言实现哈希_哈希c语言代码

    ---- 简单的哈希的实现,c语言。 哈希原理 哈希是为了根据数据的部分内容(关键字),直接计算出存放完整数据的内存地址。...下图是一个哈希运行时内存布局: 先说一下原理。 先是有一个bucket数组,也就是所谓的桶。 哈希的特点就是数据与其在中的位置存在相关性,也就是有关系的,通过数据应该可以计算出其位置。...} index >>= 27; index &= (BUCKETCOUNT - 1); return index; } 辅助函数strDup 这是比较多余的做法,因为C标准库中...因为这个哈希中保存的是键值对,所以这个方法是从哈希中查找key对应的value的。...insertEntry(&t , "显卡" , "NVIDIA GeForce GTX 850M (2 GB / 华硕)"); insertEntry(&t , "显示器" , "奇美 CMN15C4

    4.9K20

    为什么要学好c语言c语言到底多重要,你造吗

    本文不是老生常谈的废话,如:”C 语言是编程的基础”、”学好 C 语言,走遍天下都不怕”等等,本文力争详尽而又有理的回答这个问题,旨在成为最好的为什么要学习和使用 C 的文章。...二、C 语言 C 语言是由美国 AT&T 贝尔实验室的研究员 Dennis Ritchie 在 B 语言的基础上,最初作为改造 Unix 操作系统的开发语言,并伴随着 Unix 操作系统兴起而流行,后来...,随着微型计算机的发展,C 开始被移植到其他操作系统平台上,成为独立的程序设计语言。...3.2) 语言接口:现代软件工程项目的开发,不但对性能有很高要求,对于语言接口的对接能力也有很高要求,因为偌大的一个项目很少仅使用一种语言来进行开发,对于 底层,C++ 对内存和硬件的控制不如 C 简洁精准...C++ 的编程语言,感兴趣的同学可以多关注下。

    1.6K60

    【图论-存图】邻接矩阵 邻接 链式前向星

    这篇文章主要来讲一下邻接矩阵 邻接 链式前向星(本篇需要具备一定图的基础知识,至少邻接矩阵之前要会,这里主要讲解邻接和链式前向星) 我不大喜欢说废话,所以直接上图 邻接矩阵:用二维数组存储点与点之间的关系...而动态数组,在C语言里面我们用链表,如果是C++的话,用vector。...没错,所以在一定程度上,我认为邻接其实就是邻接矩阵把那些没必要的点给扣掉。...edge; //这里使用动态数组,使用普通数组也是可以的 vectore; vectorhead;//建议从1开始存,其值是指向一个e的下标 其实链式前向星,我个人觉得,可以简单理解为邻接的降为...-1的,我们把-1赋值给e[0]的next;后面同理,如果又要插入一条边为1 4 3的话,那e[1]的话,存储的值就是:4 3 0(0是head[1]插入当前结点之前的值),这样我们就有把它像邻接一样给连起来了

    56953

    数据结构 图的邻接

    呃,下面该写邻接了……. 邻接的出现是因为图若是稀疏图,用邻接矩阵会造成空间的浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用的那种。...邻接为了避免内存的浪费引入了链式存储,它的处理办法是: 1.用一个一维数组存储顶点,当然你也可以用单链表存储, 2.用单链表存储顶点的邻接点,可以将顶点改为结构体数组,结构体中存放邻接点的指针,邻接点也创建一个结构体...下面是一个无向的网图: 邻接中数据的存储图示如下(emmm,无向图果然没有有向图好画): emmm,终于画完了,我来介绍下这个图 顶点也就是个结构体数组,是存放顶点的结构,顶点中有data元素...边也是一个结构体,内有adivex元素,存放邻接点的下标,weight存放顶点与邻接点之间线的权重,next是边结构体指针,存放该顶点的下一个邻接点,next就是负责将顶点的邻接点连起来。...numvertex; //当前邻接的顶点数 int numarc; //当前邻接的边数 }GraphAdjList; //建立图的邻接 void CreateAdjListGraph

    1.1K20
    领券