图论:十字链表的基本概念理解

这篇具有很好参考价值的文章主要介绍了图论:十字链表的基本概念理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

<写博客是为了学习理解更深刻>

        在学习甲鱼课的十字链表时稍稍有点懵,进C站查找一番后发现也没有比较亲近小白的描述和解释。抱着让自己理解更深刻以及与大家分享的态度写下了这篇博客。如有错误请指出。

十字链表的引入:

        邻接表的使用简单方便,但在对有向图的处理上,单邻接表只能表示出度(如图1)

但在特定情况,需要关注点的入度,则需要再建立一个逆邻接表。

图论:十字链表的基本概念理解                                        图论:十字链表的基本概念理解

 (图1)A的邻接表,表示出边表                                                            (图2)A的入边表与出边表

因此,不妨将邻接表和逆邻接表结合起来,由此创造出十字链表,既能表示入度,也能表示出度。(图2,是不是很十字?)

十字链表的构造方法:

①重新定义表头结构

        只需对表头结构稍加改动,增加firstIn和firstOut两个指针域,分别指向以A为弧尾和以A为弧头的第一个顶点地址。这样通过对in、out两指针域迭代检索,就能获取入度和出度。(可对比观察图一,图二的头结构帮助理解)

data firstIn firstOut

 文章来源地址https://www.toymoban.com/news/detail-404741.html

data:顶点的数据                  firstIn:第一个入边表的指针        firstOut:第一个出边表的指针

②重定义边表的节点结构       

(邻接表除去头结点的链表结构,每个结点都表示一条边,因此叫边表)

        边表每个结点结构如下:

        tailvex:弧起点的下标           headvex:弧终点的下标        headlink:入边指针        taillink:出边指针

tailVex headVex headLink tailLink

每个结点都包含一条完整边的信息  tailvex->headvex;  下一条入边的地址headlink;下一条出边的地址taillink。

通过对四个域的填充即可形成十字链表。

                        有点抽象,举个具体例子帮助理解:

        1.图如左下角所示,根据步骤①建立好顶点结构

        2.建立如②所示的节点结构,与邻接表建立方式相同,将firstOut指针域指向第一条出边,再依次填充tailLink指针域,完善出边表。

图论:十字链表的基本概念理解(有点小丑 T_T)

        3.与建立逆邻接表方式相同,将firstIn指针域指向第一条入边地址,再依次填充headLink指针域,完善入边表。

 图论:十字链表的基本概念理解(以V0为例)

        4.最终形成了其他帖子里那种杂乱的十字链表图

图论:十字链表的基本概念理解(图截自bilibili鱼C-小甲鱼的《数据结构和算法》)

如此,十字链表建立完成。用一个表,即可得出图内每个顶点的入度和出度。

 

 

 

 

 

 

到了这里,关于图论:十字链表的基本概念理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 链表的顶级理解

    目录 1.链表的概念及结构 2.链表的分类  单向或者双向  带头或者不带头  循环或者非循环 3.无头单向非循环链表的实现  3.1创建单链表 3.2遍历链表 3.3得到单链表的长度 3.4查找是否包含 3.5头插法  3.6尾插法 3.7任意位置插入 3.8删除第一次出现为key的节点 3.9回收

    2024年02月11日
    浏览(33)
  • 图论相关基本概念

    从逻辑结构上讲,图是一种典型的 非线性结构 。 图(Graph) 是由 顶点的有穷非空集合和顶点之间边的集合 组成的,通常表示为 G(V , E) ,其中, G表示—个图,V是图G中顶点的集合,E是图G中边的集合。其中: 顶点集合V={x|x属于某个数据对象集}是有穷非空集合 E={(x,y)|

    2024年02月01日
    浏览(39)
  • 图论 | 网络流的基本概念

    流网络: G = ( V , E ) G = (V, E) G = ( V , E ) 有向图,不考虑反向边 s:源点 t:汇点 c ( u , v ) c(u, v) c ( u , v ) :边的最大容量 可行流 f f f 容量限制: 0 ≤ f ( u , v ) ≤ c ( u , v ) 0 leq f(u, v) leq c(u, v) 0 ≤ f ( u , v ) ≤ c ( u , v ) 流量守恒:除了源点和汇点,所有点满足 流入 = 流出 流入

    2024年02月04日
    浏览(39)
  • 说说你对链表的理解?常见的操作有哪些?

    链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,由一系列结点(链表中每一个元素称为结点)组成 每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

    2024年04月15日
    浏览(47)
  • 链表的基本操作(c语言)

    目录 链式存储结构 代码实现 链表初始化 头插法(前插法)创建含k个结点的单链表 尾插法(后插法)创建含k个结点的单链表 取第i个节点的数据域 寻找数据域等于e的结点返回该结点序号 在第i个结点插入数据域为e的结点 删除第i个结点 遍历链表 求链表结点个数(链表长度) 销毁

    2024年02月08日
    浏览(42)
  • 图论_(1)_图的基本概念

    图(graph) 是由顶点集合和顶点间的二元关系集合(即边的集合或弧的集合)组成的数据结构,通常可以用 G ( V , E ) G(V,E) G ( V , E ) 表示 顶点集合(vertext set) 用 V ( G ) V(G) V ( G ) 表示,其中元素称为 顶点(vertex) ,用 u 、 v u、v u 、 v 等符号表示。 边的集合(edge set) 用 E ( G ) E(G) E ( G

    2024年02月05日
    浏览(49)
  • 离散数学-图论-图的基本概念(11)

    1.1 图的定义 定义1: 一个 无向图 G是一个有序的二元组V,E,其中 (1)V是一个非空有穷集,称为顶点集,其元素称为顶点或结点。 (2)E是无序积VV的有穷多重子集,称为边集,其元素称为无向边,简称边。 定义2: 一个 有向图 D是一个有序的二元组V,E,其中 (1)V是一个非

    2024年02月13日
    浏览(49)
  • 图论-图的基本概念与数据结构

    无向图 边是没有方向的,也就是双向的 结点 V = { v 1 , v 2 , . . . , v 7 } mathcal{V} = { v_1,v_2,...,v_7} V = { v 1 ​ , v 2 ​ , ... , v 7 ​ } 边 ε = { e 1 , 2 , e 1 , 3 , . . . , e 6 , 7 } varepsilon = {e_{1,2},e_{1,3},...,e_{6,7}} ε = { e 1 , 2 ​ , e 1 , 3 ​ , ... , e 6 , 7 ​ } 图 G = { V , ε } mathcal{G} = { math

    2024年02月08日
    浏览(52)
  • 数据结构---双向链表的基本操作

    头插法 遍历链表 尾插法 头删法 尾删法 按位置插入数据 按位置删除数据 dooublelinklist.c doublelinklist.h doublemain.c

    2024年02月22日
    浏览(53)
  • c语言数据结构——链表的实现及其基本操作

    顺序表的问题及思考 问题: 中间/头部的插入删除,时间复杂度为O(N) 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到 200,我们再继续插入了5个数据,后面没有数据插

    2023年04月09日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包