数据结构——图的存储(2)

——本节内容为Bilibili王道考研《数据结构》P57视频内容笔记。


目录

一、十字链表法

1.缘起

2.图解

3.出度、入度

4.性能分析

二、邻接多重表

1.缘起

2.图解

3.度

4.删除操作

5.性能分析

三、邻接矩阵、邻接表、十字链表、邻接多重表对比


一、十字链表法

1.缘起

        存储有向图时,邻接表计算入度不方便、邻接矩阵空间复杂度高,采用十字链表法来一举解决这两个问题;


2.图解

 

(1)这种方法需要定义两个结构体,一个是顶点结构体(上图左半部分),一个是弧的结构体(上图右半部分);

(2)顶点结点包括:数据域、该顶点作为弧头的第一条弧、作为结尾的第一条弧;

(3)弧结点包括:弧尾顶点编号、弧头顶点编号、权值、弧头相同的下一条弧、弧尾相同的下一条弧;

(4)这里的十字链表读者可以自行动手画一遍易理解,以上图为例,画的顺序为:

        ①四个顶点结点;

        ②七个弧结点;

        ③按照说明、从上往下开始依次连接顶点结点的firstin、firstout;

        ④按照说明、从上往下、从左往右依次连接弧结点的hlink、tlink;


3.出度、入度

(1)从顶点结点的firstout开始往后找所有相连的tlink,就会找到该顶点所有发散的弧,即出度

(2)从顶点结点的firstin开始往后找所有相连的hlink,就会找到该顶点所有收敛的弧,即入度


4.性能分析

(1)空间复杂度为:O(|V|+|E|)

(2)十字链表法只能用于存储有向图


二、邻接多重表

1.缘起

        存储无向图时,邻接矩阵空间复杂度高;邻接表每条边对应两份冗余信息,删除顶点和边等操作时间复杂度高,采用邻接多重表来解决;


2.图解

(1)这种方法需要定义两个结构体,一个是顶点结构体(上图左半部分),一个是边的结构体(上图右半部分);

(2)顶点结点包括:数据域、与该顶点相连的第一条边;

(3)边结点包括:边的两个顶点编号i,j、权值、依附于顶点 i 的下一条边、依附于顶点 j 的下一条边;

(4)和十字链表法类似,按顺序画顶点结点、边结点、firstedge连线、iLink和jLink连线;


3.度

(1)沿着顶点结点的firstedge往后找对应边结点的iLink或jLink,直到找到NULL,即可找到该顶点结点所有的度


4.删除操作

(1)删除边

        上述例子中,如要删除A和B相连的边,先修改A和B的firstedge连线到顺延相应iLink或jLink的下一个边结点,再删除AB相连的边结点即可,如下图所示:

 (2)删除顶点

        上述例子中,如要删除顶点E,先修改因删除E的所有边结点所导致指向出现偏差的指针,这里出现偏差的指针为:

        ①i=2,j=1边结点中jLink的指向改为顺延原本所指的下一个jLink的所指也就是NULL;

        ②i=2,j=3边结点中iLink的指向改为顺延原本所指的下一个iLink的所指也就是NULL;

再删除E结点的所有边结点,如下图所示:


5.性能分析

(1)空间复杂度:O(|V|+|E|)

(2)删除边、删除结点等操作很方便;

(3)邻接多重表只适用于存储无向图


三、邻接矩阵、邻接表、十字链表、邻接多重表对比

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值