图的存储结构

来源:互联网 发布:ug编程等高开粗经验 编辑:程序博客网 时间:2024/06/10 01:57
  • 图有5种不同的存储结构,下面主要讲述邻接矩阵表示和邻接表表示

1.邻接矩阵:

用两个数组来表述,一个一维数组存储所有的顶点。一个二维数组,存储顶点间的边关系。

如:顶点数组vexs[5]={v0,v1,v2,v3,v4}

           边数组arc[5][5]={0 ,# ,#, #,6,   //两个顶点间连成的边的权值

                                        9, 0, 3 ,#,#,

                                        2, #, 0, 5, #,

                                        #, #, #, 0, 1,

                                       #, #, #, #, 0}

图的存储结构的定义

typedef struct

{

    char vexs[MAXVEX];

     int   arc[MAXVEX][MAXVEX];

     int   numVertex;

     int   numEdges;

}MGraph;

2.邻接链表:

将结点存入数组,并将结点的孩子进行链式存储。因此该数组是结构体数组。如

typedef struct VertexNode

{

    char data;

    EdgeNode *firstedge;

}VertexNode,AdjList[MAXVEX];

其中,每个孩子结点的定义为:

typedef struct EdgeNode

{

    int adjvex;//邻接点域,存储该结点的对应的数组下标

    struct EdgeNode *next;

}

图的结构定义为

typedef struct

{

    AdjList adjlist;

    int numVertex;

    int numEdges;

}GraphAdjList;

出自《大话数据结构》一书。
原创粉丝点击