图的数据结构
来源:互联网 发布:ubuntu wifi 编辑:程序博客网 时间:2024/06/15 18:42
无论是有向图还是无向图,最常用的两种存储结构:邻接矩阵和邻接链表。前者是顺序存储,后者是链式存储。
(1)邻接矩阵
邻接矩阵用一个一维数组存储顶点的信息,用一个二位数组存储图中边的信息。
优缺点:实现简单,但是当图为稀疏图时浪费空间。
(2)邻接表
邻接表中包括两种结点:顶点结点和边结点。
顶点结点中:data顶点域。firstarc域,用于指向第一条邻接边。
边结点中包括:adjvex邻接点域。nextarc指针域,指向下一条邻边。
优缺点:
邻接表相对于邻接矩阵如果是边稀疏图的话比较节约空间。但是邻接表要确定Vi和Vj是否有边的时候没有邻接矩阵方便。
拓展:
(1)十字链表
十字链表是链式存储,但是只能用于有向图。相比于邻接表,它的顶点结点和边结点的结构不同:
顶点结点中包括:data域存放顶点相关的数据信息,firstin和firstout两个域分别指向以该顶点为弧头和弧尾的第一个弧结点。
弧结点中包括:tailvex尾域和headvex头域分别指向弧尾和弧头这两个顶点的位置,链域hlink指向弧头相同的下一条弧,链域tlink指向弧尾相同的下一条弧,info域包括弧相关的信息。
优缺点:在十字链表中容易找到Vi的尾的弧,也容易找到以Vi为头的弧,因而容易求得顶点的出度和入度。
(2)邻接多重表
邻接多重表也是链式存储,但是仅能用于无向图。相比于邻接表,它的顶点结点和边结点的结构有所不同:
邻接多重表顶点结点的结构和邻接表相同:data域存储该顶点的信息,firestedge域指向第一条依附于该顶点的边。
弧结点中包括:mark域为标志位,用于标记该条边是否被搜索过。ivex和jvex为该边依附的两个顶点的位置。ilink指向下一条依附于ivex的边,jlink指向下一条依附于jvex的边,info为指向和边相关的各种信息的指针域。
优缺点:方便于边的搜索和边的删除。
- 【数据结构】图的实现
- 图的遍历 - 数据结构
- 数据结构---->图的遍历
- 数据结构 - 图的定义
- 数据结构-图的创建
- 图的数据结构
- 图的遍历 - 数据结构
- 数据结构-图的课程设计
- 数据结构---图的连通性
- 数据结构 - 图的遍历
- 数据结构-图的概述
- 【数据结构】图的遍历
- 数据结构:图的代码
- 数据结构-图的基本概念
- 数据结构:图的表示
- 数据结构:图的表示
- 数据结构-图的基本概念
- 数据结构---图的邻接矩阵
- 面试时关于“工作可预见困难有哪些”应聘者如何巧妙回答
- android读写excel文件
- 论文阅读《Long-term Temporal Convolutions for Action Recognition》
- python读取外部数据之读取csv格式
- 自动账户确定之AUM
- 图的数据结构
- reorder-list Java code
- continue;go to;;break;return
- MyBatis 接收数据库中没有的字段(记一次工作总结)
- Centos上ShadowSocks搭建Socket5服务器
- POJ 3057:Evacuation (搜索+二分图匹配)
- 【1034】字符串大小写逆置
- Jmeter常用脚本开发之SOAP/XML-RPC Request
- Django调试工具django-debugtools的用法