zoukankan      html  css  js  c++  java
  • 边存储结构体:链式前向星

    边结构体:

    typedef struct
    {
    int to;
    int next;
    } Edge;

    还需一个整型以及一个数组辅助变量。完整结构为:

    #define  MaxV 100
    #define MaxE 10000

    typedef struct
    {
    int to;/*当前边的终端点*/
    int next;/*也是以当前边的初始点为初始点的、与当前边相邻的另一条边在E[]中的index*/
    } Edge;
    Edge E[MaxE];
    int Adj[MaxV];/*每个顶点的最后一条边*/
    int Size;/*边的条数*/

    Adj取英文中的Adjacent前3个字母,意为相邻。这儿存储的是每个顶点的最后一条边。
    图的初始化函数为:

    void Init(int N)/*N为当前图的顶点数*/
    {
    int i;
    for(i=0; i<=N; ++i)
    {
    Adj[i]=-1;
    }
    Size=0;
    return;
    }

    添加边的函数为:

    void Add_Edge(int u,int v)/*添加一条有向边u-->v*/
    {
    E[Size].to=v;
    E[Size].next=Adj[u];
    Adj[u]=Size++;
    return;
    }

    遍历以某顶点u为初始点的所有边:

    void Show(int u)
    {
    int i;
    for(i=Adj[u]; ~i; i=E[i].next)
    {
    printf("%d-->%d\n",u,E[i].to);
    }
    return;
    }

    如果每条边还需有其他的元素的话,Edge的结构体中还需加入对应元素。

    该结构体与邻接矩阵相比的话。在稀疏图上完胜,在稠密图上,则还是建议使用邻接矩阵。


     


     

  • 相关阅读:
    显示多行字符串
    dowhile
    获取系统的相关文件夹
    DLL 实际应用版本
    ShellExecute
    LoadLibrary
    MFC DLL的创建
    在DLL中存放资源
    替换字符串
    RemoveDirectoryB
  • 原文地址:https://www.cnblogs.com/NoSoul/p/2429958.html
Copyright © 2011-2022 走看看