关于邻接多重表

对于邻接表存储无向图,结点的个数是边数的两倍,如图:
这里写图片描述
该图有5条边,用邻接表存储:
这里写图片描述
结点是边数的2倍,而且对边进行操作时(比如删除,插入等)要对两个顶点操作,比较麻烦,所以书上又介绍了邻接多重表:

这里写图片描述

这里写图片描述
对于这张图G1的邻接多重表的图,我就纳闷了,比如用邻接多重表创建无向图时,输入序列(权值暂且不考虑,为0):
0 1 0
0 3 0
1 2 0
1 4 0
2 3 0
2 4 0
嗯,输入0 1 0,0 3 0 时直接建立新结点,同时v1指向结点(0,1),v3指向结点(0,3),这么表示应该能懂吧?然后是1 2 0,现在怎么办呢?新建一个结点?,但是v1的指针域已经指向了创建的结点(0,1)。。。。
想了很久,还是觉得用自己的吧,索性在顶点结点结构体中增加一个指针域,类似十字链表,书不能不信,也不能全信,不管书错没错,总之,自己在将概念转化为自己动手实现,并体会其中是怎么一步一步建立的这种过程,会收获很多,再看一下书上十字链表的建立算法(书上是c实现的):
这里写图片描述
这里写图片描述
自己弄懂才是自己的,自己实现出来才会有收获,眼高手低也不行
所以我就将邻接多重表的顶点结点添加了一个指针,类似十字链表,由于基本上和十字链表差不多,就不贴源码了,
这里写图片描述

对任意给定的图(顶点数不小于20,边数不少于30,图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边(或弧)的信息,并存储到相应存储结构(邻接矩阵、邻接表、十字链表、邻接多重表,任选其中两种类型),对自己所创建的图完成以下操作: 对无向图求每个顶点的度,或对有向图求每个顶点的入度和出度(5分) 完成插入顶点和边(或弧)的功能(5分) 完成删除顶点和边(或弧)的功能(5分) 两种存储结构的转换(5分),如果其中一种存储结构为十字链表或邻接多重表则增加5分。 输出图的深度优先遍历序列或广度优先遍历序列(5分) 求图的深度优先或广度优先的生成树(或生成森林)(存储结构为孩子-兄弟链表),并对生成树进行遍历(15分) 判断图的连通性,输出连通分量的个数(5分) 判断图中是否存在环,无向图5分,有向图10分 给出顶点u和v,判断u到v是否存在路径(5分) 10、求顶点u到v的一条简单路径(10分) 11、求顶点u到v的所有简单路径(15分) 12、求顶点u到v的最短路径(10分) 13、求顶点u到其余各顶点的最短路径(15分) 14、求任两个顶点之间的最短路径(15分) 15、求最小生成树(15分) 16、对于有一个源点和一个汇点的有向网,求关键路径(20分) 编程环境可以是C、VC++、JAVA,每位同学从上述题目中选择100分的题目,注意,必须选择第1-6题。
引用: 十字链表是一种用于表示有向图的数据结构。它包含两种类型的节点:顶点节点和弧节点。顶点节点记录着当前顶点的相关信息,如顶点的数据、指向该顶点的入度弧节点和指出该顶点的出度弧节点。而弧节点则表示两个顶点之间的有向边关系,其中tailvex表示弧的起始顶点,headvex表示弧的结束顶点,而headlink和taillink分别指向与该节点相邻的下一条弧的节点。 引用: 邻接多重表也是一种用于表示无向图的数据结构。它与十字链表相似,同样包含顶点节点和边节点。每个顶点节点记录着当前顶点的相关信息,如顶点的数据以及与该顶点相邻的一条边的节点。而边节点则表示两个顶点之间的无向边关系,其中ivex和jvex分别表示边的两个顶点,ilink和jlink分别指向与该边相邻的下一条边的节点。需要注意的是,邻接多重表中的边是双向的,因此在图的存储中每条边都需要用两个边节点表示。 所以,十字链表是用于表示有向图的数据结构,而邻接多重表则用于表示无向图的数据结构。它们分别在记录顶点和边之间的关系上有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [6-4图-十字链表与邻接多重表](https://blog.csdn.net/weixin_45825865/article/details/116152711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值