美文网首页
经典数据结构 — 图

经典数据结构 — 图

作者: 奉灬孝 | 来源:发表于2021-03-14 20:18 被阅读0次
图.png

图[Graph] 是由顶点的有穷非空集合和顶点之间边的集合组成.通常表示为: G[V,E] 其中,G 表示一个图,V图G 中的顶点集合,E图G 中边的集合.

各种图

无向图&无向边

无向图&无向边.png

有向图&有向边

有向图&有向边.png

无向完全图

无向完全图.png

有向完全图

有向完全图.png

网.png

图的存储

快手面试真题

【数据结构与算法设计】 将下边图存储到计算机中.请设计一个数据结构并将其合理存储起来。


有向图的存储.png

其邻接矩阵如下图:


邻接矩阵.png
结论:设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:
定义.png
邻接矩阵的思考
针对邻接矩阵的思考.png

针对上面的面试题,对应的邻接矩阵为:


邻接矩阵.png
邻接矩阵矩阵存储的数据结构设计
#define MAXVEX 100 /* 最大顶点数,应由用户定义 */
#define INFINITYC 0 

typedef int Status;    /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef char VertexType; /* 顶点类型应由用户定义  */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */
typedef struct
{
    VertexType vexs[MAXVEX]; /* 顶点表 */
    EdgeType arc[MAXVEX][MAXVEX];/* 邻接矩阵,可看作边表 */
    int numNodes, numEdges; /* 图中当前的顶点数和边数  */
}MGraph;
邻接矩阵矩阵存储代码的实现思路
  1. 缺点地点数和边树
  2. 读取顶点信息
  3. 初始化邻接矩阵
  4. 读取边信息
  5. 循环打印
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.输入顶点信息/顶点表
    printf("输入顶点信息:\n");
    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");
}

使用并打印:

printf("邻接矩阵实现图的存储\n");
/*图的存储-邻接矩阵*/
MGraph G;
CreateMGraph(&G);
打印结果.png

相关文章

  • 经典数据结构 — 图

    图[Graph] 是由顶点的有穷非空集合和顶点之间边的集合组成.通常表示为: G[V,E] 其中,G 表示一个图,...

  • 图表的数据返回格式

    柱状图、折线图、雷达图的数据结构 饼状图、圆环图、漏斗图、仪表盘的数据结构 地图的数据结构 散点图的数据结构 sc...

  • 经典数据结构合集(C语言版)(七日成蝶)_C/C++开发培训课程

    课程介绍: 通过课程的学习,掌握经典的数据结构,如:线性表、链表、队列、栈、树、图等,并熟练掌握几种经典结构的C语...

  • Golang 实现 Trie (前缀树) leetcode-20

    前缀树,字典树,经典的数据结构。

  • 数据结构经典面试题-图

    本系列针对面试中【经典】手写算法题进行分类和汇总,每篇主要包含两大部分:基础知识和面试经典题目。 本篇的主角是【图...

  • 14-图和图的存储

    图 如何理解图?前面我们学习了线性表,链表,树等基础数据结构,图这种数据结构就是它们的综合利用。我们都知道,图有边...

  • HashMap源码分析

    HashMap数据结构 HashMap数据结构.png HashMap继承图 HashMap-class.jpg ...

  • 有向无环图的数据结构和拓扑排序

    有向无环图的拓扑排序,首先定义有向图的存储数据结构,邻接链表Bag,实现Iterable接口。 定义有向图的数据结构:

  • OVS 源码分析整理

    OVS 核心代码 OVS 架构 OVS 主要的数据结构数据结构关系图主要的数据结构和数据结构的参数数据结构代码 d...

  • 算法

    十大经典排序算法(动图演示) 【数据结构】链表的原理及与其相关的常见面试题总结 一、排序算法 交换排序冒泡排序快速...

网友评论

      本文标题:经典数据结构 — 图

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