zoukankan      html  css  js  c++  java
  • 图的存储

    图的存储

    1. 邻接矩阵
    2. 邻接表
    3. 十字链表
    4. 邻接多重表

    邻接矩阵法

    #define MaxVertexNum 100 //顶点数目的最大值
    typedef struct{
        char Vex[MaxVertexNum];	//顶点表
        int Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表
        int vexnum,arcnum;//图的当前顶点数和边数/弧数
    }MGraph;
    

    顶点中可以存更加复杂的信息

    可以用bool型或枚举型变量表示边。

    int——4B or 8B

    bool——1B

    邻接矩阵法存储带权图(网)

    #define MaxVertexNum 100		//顶点数目的最大值
    #define INFINITY			//宏定义常量“无穷”
    typedef char VertexType;		//顶点的数据类型
    typedef int EdgeType;
    typedef struct{
        VertexType Vex[MaxVertexNum];
        EdgeType Edge[MaxVertexNum][MaxVertexNum];
        int vexnum,arcnum;
    }
    

    如何定义“无穷”

    邻接矩阵的性能分析

    空间复杂度:

    [O(|v|^2) ]

    只和顶点数相关,和实际的边数无关

    只适用于存储稠密图

    无向图的邻接矩阵是对称矩阵,可以压缩存储

    邻接矩阵法的性质

    从1(A)-4(D)长度为2的路径有几条。

    知识回顾

    数据实现的顺序存储,空间复杂度高,不适合存储稀疏图。

    邻接表法(顺序表+链式存储)

    无向图:

    //“顶点”
    typedef struct VNode{
        VertexType data;	//顶点信息
        ArcNode *first;		//第一条边/弧
    }VNode,AdjList[MaxVertexNum];
    
    //用邻接表存储的图
    typedef struct{
        AdjList vertices;
        int vexnum,arcnum;
    }ALGraph;
    
    //“边/弧”
    typedef struct ArcNode{
        int adjvex;		//边/弧指向哪个节点
        struct ArcNode *next;		//指向下一条弧的指针
        //InfoType info;			//边权值
    }ArcNode;
    

    表示方法不唯一

    有向图:

    十字链表法(存储有向图)

    空间复杂度:O(|V|+|E|)

    出边:顺着绿色线找

    入边:顺着橙色线找

    十字链表发只能存储用向图

    邻接多重表(存储无向图)

    删除结点

  • 相关阅读:
    http/ip 协议
    shell脚本
    LoadRunner脚本编写
    【WebGL】《WebGL编程指南》读书笔记——第6章
    【WebGL】《WebGL编程指南》读书笔记——第5章
    【WebGL】《WebGL编程指南》读书笔记——第4章
    【WebGL】《WebGL编程指南》读书笔记——第3章
    【WebGL】《WebGL编程指南》读书笔记——第2章
    【移动支付】.NET微信扫码支付接入(模式二-NATIVE)
    【学车】学车笔记-科目二
  • 原文地址:https://www.cnblogs.com/jev-0987/p/13210240.html
Copyright © 2011-2022 走看看