图的存储

1.邻接矩阵

typedef struct{
    char Vex[N];//顶点表 
    int Edge[N][N];//邻接矩阵,边表 
    int vexnum, arcnum;//图的当前顶点数和弧数 
}MGraph;

 

2.邻接表

typedef struct ArcNode{//边表结点 
    int adjvec;//该弧所指向顶点的位置 
    struct ArcNode *next;//指向下一条弧的指针
    //int info;//网的边权值 
}ArcNode;
typedef struct VNode{//顶点表结点 
    char data;//顶点信息 
    ArcNode *first;//指向第一条依附该顶点的弧的指针 
}VNode, AdjList[N];
typedef struct{
    AdjList vertices;//邻接表 
    int vexnum, arcnum;//图的顶点数和弧数 
}ALGraph;//邻接表存储的图类型 

//确定顶点位置 
int LocateVex(ALGraph *G, char v){
    for(int i = 0; i < (G->vexnum); i++){
        if(G->vertices[i].data == v)
             return i;
    }
}

 

3.十字链表(有向图)

typedef struct ArcNode{
    int tailvex, headvex;
    struct ArcNode *hlink, *tlink;
    //InfoType info; 
}ArcNode;
typedef struct VNode{
    char data;
    ArcNode *fisrtin, *firstout;
}VNode;
typedef struct VNode{
    VNode xlist[N];
    int vexnum, arcnum;
}GLGraph;

 

 

4.邻接多重表(无向图)

typedef struct ArcNode{
    bool mark;
    int ivex, jvex;
    struct ArcNode *ilink, *jlink;
    //InfoType info; 
}ArcNode;
typedef struct VNode{
    char data;
    ArcNode *firstedge;
}VNode;
typedef struct{
    VNode adjmulist[N];
    int vexnum, arcnum;
}AMLGraph;

 

posted @ 2018-12-08 17:24  Johnny、  阅读(224)  评论(0编辑  收藏  举报