数据结构数据存储表示---图

-------------图表示-------------

1)、图的数组(邻接矩阵)存储表示

  #define INFINITY INT_MAX    //最大值

#define MAX_VERIEX 20   //最大顶点个数

typedef enum{DG,DN,AG,AN} GraphKind   //有向图,有向网,无向图,无向网

typedef struct AreCell {

  VRType adj;  //表示顶点关系类型,对无全图,用0或1,表示相邻否,对带权图,则为权值类型,

  InfoType *info;  //与该狐相关的指针信息

}ArcCell,AdjMatrix[MAX_VERIEX][MAX_VERIEX];

typedef struct {

  VertexType vexs[MAX_VERIEX];   //顶点向量

  AdjMatrix arcs;            //邻接矩阵

  int vexnum,arcnum;     //图的当前顶点数和弧数

  GraphKind kind;           //图的种类标志

}MGraph;

 

------------图的邻接表存储表示--------------------

#define MAX_VERTEX_NUM 20   

typedef struct ArcNode{

  int  adjvex;  //该弧所指向的顶点的位置

  struct ArcNode *nextarc;  //指向下一条弧的指针

  InfoType *info;

}ArcNode;

typedef struct VNode{

  VertexType data;           //顶点信息

  ArcNode  *fristarc;          //指向第一条依附该顶点弧指针

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct{

  AdjList vertices;

  int vexnum,arcnum;  //图的当前顶点数和弧数

  int kind;  //图的种类标志

}ALGraph;

 

----------------有向图的十字链表存储表示--------------

#define MAX_VERTEX_NUM 20

typedef struct ArcBox{

  int taiivex,handvex;  //该弧的尾和头顶点数目

  struct ArcBox   *hlink,*tlink;  //分别为弧头和弧尾相同的链域

  InfoType *info;

}ArcBox;

typedef struct VexNode{

  VertexType data;

  ArcBox  *firstin,*firstout;   //分别指向顶点第一条入弧和出弧

 

}VexNode;

typedef struct {

  VexNode xlist[MAX_VERTEX_NUM];  //表头向量

  int vexnum,arcnum;    //有向图的当前顶点数和弧数

}

 

----------------无向图的邻接多重表存储表示----------------

#define MAX_VERTEX_NUM 20

typedef enum{unvisited,visited}ViditIf;

typedef struct EBox{

  VisitIf mark;  //访问标记

  int ivex,jvex; //改变依附的两个顶点位置

  struct EBox  *ilink,*jlink;    //分别指向依附这两个顶点的下一条

  InfoType *info;

}EBox;

typedef struct VexBox{

  VextexType data;

  EBox *fristedge;        //指向第一条依附该顶点的边

}VexBox;

typedef struct{

  VexBox adjmulist[MAX_VERTEX_NUM];  

  int vexnum,edgenum;  //无向图的顶点数和边数;

}AMLGraph;

 

 

 

posted @ 2013-11-09 00:34  弦月ll  阅读(209)  评论(0)    收藏  举报