大神一个关于C语言中有向图的有关问题~

请教各位大神一个关于C语言中有向图的问题~~~
最近碰到一个比较复杂的数据结构问题,感觉和C里面的有向图的结构差不多的,自己写了一下,感觉很多地方都写得不是很合理,请教高人写一个创建此图的方法。

结构图大致如下:
大神一个关于C语言中有向图的有关问题~

// 节点struct定义如下:
struct Spoint
{
    int id;
    char name[10];
    Spoint *next;// 指向下一个节点
   Spoint *father;// 指向父节点
   Special *special;// 特殊节点,当一个节点有两个以上的父节点的时候则使用此链描述
};

结合上图以及上面的struct说明如下:
黑色的线代表的是next指针指向;蓝色的线代表的是father指针指向;红色的线是当一个节点有两个以上的前驱节点时使用的特殊节点special指针;

//特殊节点struct
struct Special
{
    Spoint *point;// point指针指向的是某个Spoint节点,如上图,类似g节点才会有Special的结构,而point指向e

    Spoint *next;// next指针指向的是下一个特殊节点,如上图,next指向的下一个特殊Special结构的point指针指向的是f的地址
};

数据源如下:
struct SourceData
{
    int id;
    char name[10];
    long pointId[100];// 这里记录的是每个节点的前驱节点的id号,最少有一个,最多100个,当只有一个的时候那么就表示该节点存在一个father节点,如果大于1,则表示该节点不存在 father节点了,而是特殊节点;
};

int main()
{
    vector<SourceData> vecData;// 假设数据源已经都放入到此vector中了

    for(int i = 0; i < vecData.size(); i++)
     {
          Create(vecData);
     }
}

// 那么我这里需要根据数据源生成一个类似上图中那样的结构,然后将链表头指针返回
Spoint * Create(vecData &data)
{
   
}

请大牛帮忙实现以下create函数,谢谢了~

------解决方案--------------------
那个,addEdge返回void,手滑写错了没改。