图的存储结构
2016-04-01 15:10
337 查看
1、邻接矩阵。使用二位数组存储。
2、邻接表。使用链表存储。每个顶点拥有自己的链表,链表存储该顶点 的邻接点。如果是有向图,链表节点个数表示该顶点的出度。
3、逆邻接表。使用链表存储。通常针对有向图,与邻接表相反,链表节点个数表示该顶点的入度。
4、十字链表,邻接表与逆邻接表的结合。适用于有向图/稀疏矩阵,方便求顶点的出度和入度。有点节点、边节点,结构体定义如下:
5、邻接多重表。适用于无向图,需要删除边的情况。可以用来求点的度。类比:十字链表是有向图的邻接多重表。邻接多重表不唯一。点节点、边节点结构体定义:
6、边集数组。通常适用于边的条数小于点的个数时使用。使用两个数组,数组1存储点,int a[3] = {0, 1, 2}; 数组2存储边结构,结构体定义:
2、邻接表。使用链表存储。每个顶点拥有自己的链表,链表存储该顶点 的邻接点。如果是有向图,链表节点个数表示该顶点的出度。
3、逆邻接表。使用链表存储。通常针对有向图,与邻接表相反,链表节点个数表示该顶点的入度。
4、十字链表,邻接表与逆邻接表的结合。适用于有向图/稀疏矩阵,方便求顶点的出度和入度。有点节点、边节点,结构体定义如下:
struct VNode { int i; // 点索引 VNode *olink, *ilink; // 出度边,入度边指针 } struct ENode { int i, j; // 边的起点终点 ENode *right, *down; // 同一行,同一列指针 int weight; // 权重 int index; // 边索引号 }
5、邻接多重表。适用于无向图,需要删除边的情况。可以用来求点的度。类比:十字链表是有向图的邻接多重表。邻接多重表不唯一。点节点、边节点结构体定义:
struct VNode { int i; // 点索引 VNode *link; // 指向第一条边 } struct ENode { int i, j; // 点索引 ENode *ivex, *jvex; // i,j点分别邻接的其它边 int weight; // 权 int index; // 边索引 }
6、边集数组。通常适用于边的条数小于点的个数时使用。使用两个数组,数组1存储点,int a[3] = {0, 1, 2}; 数组2存储边结构,结构体定义:
struct ENode { int index; // 边索引 int start, end; // 起点终点 int weight; }
相关文章推荐
- 浅谈算法和数据结构: 十一 哈希表
- 【Redis源码剖析】 - Redis内置数据结构之字典dict
- 数据结构中的7种排序算法
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 数据结构 顺序串的各种模式匹配算法
- 数据结构与算法之二分查找
- hdu 4252(单调栈)
- 从B树、B+树、B*树谈到R 树
- 数据结构 顺序串的各种基本运算
- 10个队中非空队列按队列号从小到大的顺序串接成一条链
- 【数据结构与算法】十五
- 《大话数据结构》第9章 排序 9.10 总结回顾
- 数据结构之队列
- ldif的数据结构及一个DEMO
- 整数序列环形队列
- 数据结构与算法分析视频教程全集
- 平衡树之AVL树旋转
- ZOJ 3228 AC自动机
- Redis不同数据类型的的数据结构实现
- “顺序栈”判断表达式中的括号是否正确配对