这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战
图的存储结构
1.邻接矩阵法
用一个一维数组存储图中极点的信息,用一个二维数组存储图中边的信息, 存储极点之间邻接联络的二维数组称为邻接矩阵
对数组指针非带权图,结点数为n的图G的邻接矩阵A是nn。
用一个一维数组存矩阵工厂怎么开储图中极点的信息,用一个二维数组存储图中边的信息, 存储极点之间邻接联络的二维数组称为邻接矩阵
对带权图,结点数为n的图G的邻接矩阵A是nn。
图的邻接矩阵存储结构定义代码
#define MaxVertexNum 100 //极点数目的最大值
typedef矩阵的秩 char Verte数组公式xType; // 极点的数据类型
type矩阵def int Edg数组指针eType; //带权图中边上权值的数据类型
typedef struct{
VertexType Vex数组去重[Ma指针式万用表xVertexNum]; //极点表
Edg链表回转eType Edge[MaxVertexNum][MaxVertexNum];复杂度 //邻接矩阵,边表
int vexnum,arcnum; //图的其时极点数和弧数
}MGraph;
用一个链表怎么调理长度一维数组存储图中极点的信息矩阵的迹,用一个二维数组存储图中边的信息, 存储极点之间邻接联络的二维数矩阵相似组称为邻接矩指针万用表的使用方法阵
留意
- 无向图的邻接矩阵是对称矩阵,对规划较大的邻接矩阵可指针舆情助手运用紧缩存储
- 邻接矩阵标明法的空间复杂度是O(2),其间n为图的链表查询极点数
- 对无向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素矩阵的秩)的个数,正好是第i个极点的度TD()
- 对有向图,邻接矩阵的第i行链表回转(或第i列)非零元素(或非复杂度最优∞元素)指针数组的个数,正好是第i个极点的数组指针出度OD()(或入度ID数组去重())
- 邻接矩阵法存储图,承认图中恣意两个极点之间是否有边相连只需O(1)时刻复数组杂度
- 但要承认图中有多少条边,则必须遍历整个二维数组,时刻复杂度为O(2)
- 稠密图适合运用邻接矩阵的存储标数组转字符串明
2.邻接表法
对图G中的每个极点建立一个单链表,第i个单链表中的结点标明依附于极点的边(对有向图是以极点为尾的弧),这个单链表称为极点的边表(对有向图称为出边表)
邻接表中数组词有两种结点:极点表结点和边表结点
无向图邻接表法
有向图邻接表法
图的邻接表法存储结构定义代码
#define MaxVertexNum 100 //图中极点数目的最大值
typedef struct ArcNode{ //边表结点
int adjvex; //该弧指向的极点复杂度o方位
struct ArcNode *next; //指向下一条弧的指针
//InfoType info; //网的权值
}ArcNode;
typedef struct复杂度最优 VNode{ //极点表结点
VertexType data; /复杂度o/极点信息
ArcNode *first; //指向第一条依附于该极点的弧的指针
}VNode,AdjList[MaxVertexNum链表怎么调理长度];
typedef struct{
AdjList vertices; //邻接表
int vexnum,arcnum; //图的极点数与弧数
}ALGraph;
留意
- 对无向图,所需存储空间为O(|V|+2|E|)
- 对有向图,所需存储空间为O(|V|+|E|)
- 对稀疏图选用邻接表标明可极大地节约存储空间
- 对一给定极点找它所有链表的特色邻边,邻接表中只需O(1)时刻复杂度,在邻接矩阵中数组公式,相同操作需求扫描一行,时刻复杂度为O(n)
- 若要承认给定的两极点之间是否存在边,邻接矩阵只需求O(1)的时刻复杂度,邻接表中则要查对应结点的边表,功率较低
- 对有向图的邻接表标明,求一给定极点的出度只需扫描相应的边表,复杂度最优但求其入度需求遍历整个邻接表
- 图的邻接表标明不仅有,这是由于每个极点对应的单链表中各边结点的链接次第链表的特色可所以恣意数组去重的