大神一个关于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,手滑写错了没改。
最近碰到一个比较复杂的数据结构问题,感觉和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,手滑写错了没改。