美文网首页
73_图的存储结构(下)

73_图的存储结构(下)

作者: 编程半岛 | 来源:发表于2018-07-30 18:58 被阅读8次

    关键词:邻接链表法、

    0. 邻接矩阵法中残留问题

    MatrixGraph无法动态添加/删除顶点

    1. 基本思想

    为了进一步提高空间使用率,可以考虑使用链表替换数组,将邻接矩阵变换为邻接链表

    2. 邻接链表法

    • 图中的所有顶点按照编号存储于同一个链表中
    • 每一个顶点对应一个链表,用于存储始发于该顶点的边
    • 每一条边的信息包含:起点,终点,权值


      邻接链表法示意图
      邻接链表法示例
      ListGraph继承关系图
    • 边数据类型的设计
    struct Edge :  public Object
    {
      int b;    // 起始顶点
      int e;    // 邻接顶点
      E data;    // 权值
      // ...
    };
    
    • 顶点数据类型的设计
    struct Vertex : public Object
    {
      V* data;    // 顶点数据元素值
      LinkList<Edge> edge;  // 邻接于该顶点的边
      // ...
    }
    
    • 动态增加/删除顶点:
      int addVertex():增加新的顶点,返回顶点编号
      int addVertex(const V& value):增加新顶点的同时附加数据元素
      void removeVertex():删除最近增加的顶点

    ListGraph.h

    3. 小结

    • 邻接链表法使用链表对图相关的数据进行存储
    • 每一个顶点关联一个链表,用于存储边相关的数据
    • 所有顶点按照编号被组织在同一个链表中
    • 邻接链表法实现的图能够支持动态添加/删除顶点

    声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
    实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

    相关文章

      网友评论

          本文标题:73_图的存储结构(下)

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