数据结构《图》

1.什么是图?图(Graph)是表示物件与物件之间的关系的数学对象

           图,是一种比树更为复杂的数据结构。树的节点之间是一对多的关系,并且存在父与子的层级划分;而图的顶点(注意,这里不叫节点)之间是多对多的关系,并且所有顶点都是平等的,无所谓谁是父谁是子。

           在图中,最基本的单元是顶点(vertex),相当于树中的节点。顶点之间的关联关系,被称为边(edge)。边上被赋予一定的值,代表代价,称为权重,这样的图成为带权图

           顶点之间的边就有了方向的区分,这种带有方向的图被称为有向图

 

2.图的几种存储方式:

 

2.1.邻接矩阵

     无向图

                         

注意:无向图邻接矩阵一定是对称的

    有向图

                         

注意:邻接矩阵的存储方法简单直观,可以迅速查到一个顶点和另一定点的关系;但是,由于每个顶点都需要存储关系,n个顶点至少需要n^2的数组,当只有部分点有关联时,浪费了存储空间。

2.2.邻接表和逆邻接表

                         

        邻接表中,每个顶点都是一个链表的头节点,其后连接着该顶点能够直接到达的相邻顶点。如:想找到0是否能到达节点1,需要遍历节点,从0开始,向后即可,也能找到0所到达的所有相邻节点。

邻接表形势的存储结构,可以解决临界矩阵的空间占用问题。

但是,想要查出哪些节点可以到达节点1,就需要重新遍历,然后看是否可以在邻接表中找到,最后发现0和3号节点都可以到达。但是这样的查询又需要遍历,于是采用上逆邻接表来解决。

                        

逆邻接表每一个顶点作为链表的头节点,后继节点存储能够直接到达该顶点的相邻顶点。

     总结来看

                       

2.3.十字链表

结构包括

                        

入弧和出弧:入弧是发出箭头的顶点,出弧是箭头指向的顶点。

弧头和弧尾:弧尾表示发出箭头的顶点,弧头表示箭头指向的顶点。

                        针对该图:

                                                            

画十字链表的方法:

1.先画出邻接表

2.连线(相当于画出逆邻接表)

逆邻接表画法比较复杂,简单来说分两步即可。

总结:

        图片前两个参考https://mp.weixin.qq.com/s/FGwRyNAIr1VFzcV4IUOgSA,后面visio绘图作为补充

        图分为有向图,无向图,根据是否带权,分为带权图和无权图。

        图的几种存储方式要理解:邻接矩阵,邻接表,逆邻接表,十字链表。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值