图的存储结构

来源:互联网 发布:逆波兰表达式算法 java 编辑:程序博客网 时间:2024/05/29 15:42

图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序映像的存储结构,用链式映像结构则会浪费很多存储单元,所以图有自己的存储结构,常用的为数组表示法(邻接矩阵法),邻接表法

邻接矩阵表示法

#define INFINITY INT_MAX//最大值#define MAX_VERTEX_NUM 20//最大顶点个数 #define MAX_INFO 20//相关信息字符串的最大长度+1 typedef int VRType;typedef char InfoType;typedef char VertexType; typedef enum{DG,DN,UDG,UDN} GraphKind;//图的种类 /*图的种类DG(有向图),DN(有向网),UDG(无向图),UDN(无向网)*/typedef int Status;typedef struct ArcCell{VRType adj;//VRType是顶点间关系类型,对无权图,用1或0表示相邻否,对有权图,则为权值类型InfoType *info;//该弧相关信息的指针 }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{VertexType vexs[MAX_VERTEX_NUM];//顶点向量(存顶点的数组)AdjMatrix arcs;//邻接矩阵int vexnum,arcnum;//图的当前顶点数和弧数GraphKind kind;//图的种类标志 }MGraph;
邻接表表示

#define MAX_VERTEX_NUM 20typedef char VertexType;typedef char InfoType; typedef struct ArcNode//单链表中的结点 {int adjvex;//该弧所指向的顶点的位置struct ArcNode *nextarc;//指向下一条弧的指针InfoType *info;//该弧相关信息的指针 }ArcNode;typedef struct VNode//表头结点 {VertexType data;//顶点信息ArcNode *firstarc;//指向第一条依附该顶点的指针 }VNode,AdjList[MAX_VERTEX_NUM];typedef struct{AdjList vertices;int vexnum,arcnum;//图的当前顶点数和弧数int kind;//图的种类标记 }ALGraph;



原创粉丝点击