图的存储
图的存储
- 邻接矩阵
- 邻接表
- 十字链表
- 邻接多重表
邻接矩阵法
#define MaxVertexNum 100 //顶点数目的最大值 typedef struct{ char Vex[MaxVertexNum]; //顶点表 int Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表 int vexnum,arcnum;//图的当前顶点数和边数/弧数 }MGraph;
顶点中可以存更加复杂的信息
可以用bool型或枚举型变量表示边。
int——4B or 8B
bool——1B
邻接矩阵法存储带权图(网)
#define MaxVertexNum 100 //顶点数目的最大值 #define INFINITY //宏定义常量“无穷” typedef char VertexType; //顶点的数据类型 typedef int EdgeType; typedef struct{ VertexType Vex[MaxVertexNum]; EdgeType Edge[MaxVertexNum][MaxVertexNum]; int vexnum,arcnum; }
如何定义“无穷”
邻接矩阵的性能分析
空间复杂度:
只和顶点数相关,和实际的边数无关
只适用于存储稠密图
无向图的邻接矩阵是对称矩阵,可以压缩存储
邻接矩阵法的性质
从1(A)-4(D)长度为2的路径有几条。
知识回顾
数据实现的顺序存储,空间复杂度高,不适合存储稀疏图。
邻接表法(顺序表+链式存储)
无向图:
//“顶点” typedef struct VNode{ VertexType data; //顶点信息 ArcNode *first; //第一条边/弧 }VNode,AdjList[MaxVertexNum]; //用邻接表存储的图 typedef struct{ AdjList vertices; int vexnum,arcnum; }ALGraph; //“边/弧” typedef struct ArcNode{ int adjvex; //边/弧指向哪个节点 struct ArcNode *next; //指向下一条弧的指针 //InfoType info; //边权值 }ArcNode;
表示方法不唯一
有向图:
十字链表法(存储有向图)
空间复杂度:O(|V|+|E|)
出边:顺着绿色线找
入边:顺着橙色线找
十字链表发只能存储用向图
邻接多重表(存储无向图)
删除结点
本文作者:Jev_0987
本文链接:https://www.cnblogs.com/jev-0987/p/13210240.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步