图也是重点,和树结合考虑,因为很多应用就是把图生成一颗树。图逻辑关系是结点集合和
边集合,但怎么怎么存图到计算机中:顺序存储用邻接矩阵,链式存取用邻接表,这两种存
储方式都要会,即不仅仅看到逻辑关系的图是图,用邻接矩阵或邻接链表表示的也是图。图
的遍历:深度优先搜索生成树用栈,广度优先搜索生成树用队,要会用它们求连通分量。几
种图的应用,拓扑排序求是否有环路(有向无环图),关键路径的求法(会画表格求法即可),
会用 Prim 算法求最小生成树,会用 Dijkstra 算法求最短路径生成树(即 D[n]向量的计算)。

一 图的概念

  1. 定义:数据结构中有线性结构(前驱和后继的关系)、树型结构(层次关系),图是一种结点具有任意关系的结构。
  2. 术语:无向图,边,度;有向图、弧、出度入度,头和尾
    稀疏图;
    子图;
    赋权图即网;
    无向图可能是连通图,有向图可能是强连通图;无向图中的连通分量,有向图中的强连通分量;
    联通图的生成树:n个结点、n-1条边;

二 图的存储结构

  1. 数组表示法——邻接矩阵表示法
    图没有顺序映像的存储结构,但可以借助数组的数据类型表示元素之间的关系
    typedef enum{DG,DN,UDG,UDN}GraphKind; //枚举图的 4 种类型

typedef struct {
VRType adj; //对于无权图,用 1 或 0 表示是否相邻;对于带权图,直接为权值,若无权值用无穷。
InfoType * info; //弧或边额外含有的信息指针
}ArcCell,AdjMatrix[MAX_VERtEX_NUM][MAX_VERtEX_NUM]; //数据元素(结点)之间的关系

typedef struct {
VertexType vexs[MAX_VERtEX_NUM]; //存储图中顶点数据
AdjMatrix arcs; //二维数组,记录顶点之间的关系
int vexnum,arcnum; //记录图的顶点数和弧(边)数
GraphKind kind; //记录图的种类
}MGraph;

  1. 链式存储结构——邻接表
    n个顶点对应n个单链表,n个单链表的表头又以顺序结构存储、相连接。
    单链表有一个表头结点和许多表结点。注意:有向图的表结点是以结点为尾的弧的头,尾就是“出去的头”
    数据结构——图
    数据结构——图

相关文章:

  • 2021-06-28
  • 2021-06-02
  • 2021-08-08
  • 2021-05-10
猜你喜欢
  • 2022-01-05
  • 2022-12-23
  • 2021-08-09
  • 2021-12-02
  • 2021-06-03
相关资源
相似解决方案