美文网首页
图的存储方式

图的存储方式

作者: 旅行者_sz | 来源:发表于2020-04-30 10:37 被阅读0次

一、邻接矩阵存储(连续的存储空间)

1.图的存储结构:

typedef struct
{
    VertexType vexs[MAXVEX]; /* 顶点表 */
    EdgeType arc[MAXVEX][MAXVEX];/* 邻接矩阵,可看作边表 */
    int numNodes, numEdges; /* 图中当前的顶点数和边数  */
}MGraph;

2.邻接矩阵图:

void CreateMGraph(MGraph *G){
    
    int i,j,k,w;
    printf("输入顶点数和边数:\n");
    //1. 输入顶点数/边数
    scanf("%d,%d",&G->numNodes,&G->numEdges);
    printf("顶点数:%d,边数:%d\n",G->numNodes,G->numEdges);
    
    //2.输入顶点信息/顶点表
    for(i = 0; i<= G->numNodes;i++)
        scanf("%c",&G->vexs[i]);
    
    //3.初始化邻接矩阵
    for(i = 0; i < G->numNodes;i++)
         for(j = 0; j < G->numNodes;j++)
             G->arc[i][j] = INFINITYC;
    
    //4.输入边表信息
    for(k = 0; k < G->numEdges;k++){
        printf("输入边(vi,vj)上的下标i,下标j,权w\n");
        scanf("%d,%d,%d",&i,&j,&w);
        
        G->arc[i][j] = w;
        //如果无向图,矩阵对称;
        G->arc[j][i] = G->arc[i][j];
        
    }
    /*5.打印邻接矩阵*/
    for (int i = 0; i < G->numNodes; i++) {
        printf("\n");
        for (int j = 0; j < G->numNodes; j++) {
            printf("%d ",G->arc[i][j]);
        }
    }
    printf("\n");
}

二、邻接表存储方式

//邻接表的节点
typedef struct Node{
    int adj_vex_index;  //弧头的下标,也就是被指向的下标
    Element data;       //权重值
    struct Node * next; //边指针
}EdgeNode;

//顶点节点表
typedef struct vNode{
    Element data;          //顶点的权值
    EdgeNode * firstedge;  //顶点下一个是谁?
}VertexNode, Adjlist[M];

//总图的一些信息
typedef struct Graph{
    Adjlist adjlist;       //顶点表
    int arc_num;           //边的个数
    int node_num;          //节点个数
    BOOL is_directed;      //是不是有向图
}Graph, *GraphLink;
void creatGraph(GraphLink *g){
    int i,j,k;
    EdgeNode *p;
    
    //1. 顶点,边,是否有向
    printf("输入顶点数目,边数和有向?:\n");
    scanf("%d %d %d", &(*g)->node_num, &(*g)->arc_num, &(*g)->is_directed);
    
    //2.顶点表
     printf("输入顶点信息:\n");
    for (i = 0; i < (*g)->node_num; i++) {
        getchar();
        scanf("%c", &(*g)->adjlist[i].data);
        (*g)->adjlist[i].firstedge = NULL;
    }
    
    //3.
    printf("输入边信息:\n");
    for (k = 0; k < (*g)->arc_num; k++){
        getchar();
        scanf("%d %d", &i, &j);
        
        //①新建一个节点
        p = (EdgeNode *)malloc(sizeof(EdgeNode));
        //②弧头的下标
        p->adj_vex_index = j;
        //③头插法插进去,插的时候要找到弧尾,那就是顶点数组的下标i
        p->next = (*g)->adjlist[i].firstedge;
        //④将顶点数组[i].firstedge 设置为p
        (*g)->adjlist[i].firstedge = p;
        
        //j->i
        if(!(*g)->is_directed)
        {
            // j -----> i
            //①新建一个节点
            p = (EdgeNode *)malloc(sizeof(EdgeNode));
            //②弧头的下标i
            p->adj_vex_index = i;
            //③头插法插进去,插的时候要找到弧尾,那就是顶点数组的下标i
            p->next = (*g)->adjlist[j].firstedge;
            //④将顶点数组[i].firstedge 设置为p
            (*g)->adjlist[j].firstedge = p;
        }
    }
}

遍历

void putGraph(GraphLink g){
    int i;
    printf("邻接表中存储信息:\n");
    //遍历一遍顶点坐标,每个再进去走一次
    for (i = 0; i < g->node_num; i++) {
        EdgeNode * p = g->adjlist[i].firstedge;
        while (p) {
            printf("%c->%c ", g->adjlist[i].data, g->adjlist[p->adj_vex_index].data);
            p = p->next;
        }
        printf("\n");
    }
}

相关文章

  • 图的存储方式

    一、邻接矩阵存储(连续的存储空间) 1.图的存储结构: 2.邻接矩阵图: 二、邻接表存储方式 遍历

  • 图的存储方式

    图   顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G=(V,E),其中G表示一个图,V是图G中的顶点的非...

  • HashMap

    类图 1.名词解释 hash为位置计算方式,。map为存储方式 2.整体的存储方式 基础的存储方式是链表数组,就是...

  • 先深遍历

    图结构 邻接矩阵的存储方式 ① 二维数组存储②一维数组压缩存储很显然一维数组压缩存储方式,只严格存储下三角部分。第...

  • 第十九讲 数据结构之图(二)

    图的存储结构 邻接矩阵 图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组...

  • 第三章 搜索与图论模板

    树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我...

  • 图论——深度优先遍历和广度优先遍历(Java)

    图数据结构的定义 无向图 无向图的特点 邻接矩阵是对称的 有向图 图的存储 邻接矩阵存储方式 如下图所示,二维矩阵...

  • 在这篇文章中,我们要讨论一下关于图的知识点: 1.图的存储方式——邻接矩阵存储和邻接表存储 *邻接矩阵存储code...

  • Neo4j学习(1):Neo4j是什么

    1. 什么是图数据库 图数据库用图来存储数据,是最接近高性能的一种用于存储数据的数据结构方式之一。 1.1 一个图...

  • 主流图数据库Neo4J、ArangoDB、OrientDB综合对

    1: 本地存储方式2: 内置查询语言分析3: 性能分析4: 图算法支持 本地存储方式 Neo4J neo4j数据库...

网友评论

      本文标题:图的存储方式

      本文链接:https://www.haomeiwen.com/subject/rigawhtx.html