我正在C中构建一个图(非定向)。图节点是struct:
struct graphNode{
int val;
int neighborCount;
struct graphNode *neighbors[MaxN]; //this is adjacency list
}
现在,我必须动态初始化一个图的n个节点,否则我需要一个结构数组graphNodes
。然后,对于每个节点,我必须首先将邻居数组初始化为NULL。稍后,我会在添加节点时向其添加邻居。定义具有给定要求的图的正确方法是什么?我已经完成了以下操作,但我认为这是不对的。我是C.的新手
struct graphNode *createGraph(int nodes){
struct graphNode *graph = malloc(nodes * sizeof(*graph));
for(int i=0;i<MAXN;i++){
graph[i]->n = malloc(MAXN * sizeof(struct graphNode *));
}
return graph;
}
由于graphNode
结构包含邻居指针数组,所以您所需要做的就是为graphNode
数组分配空间,这就是第一个malloc
所做的。
假设您希望所有的邻居指针都初始化为NULL
,我会将malloc
更改为calloc
(它会自动将内存归零)。生成的代码看起来像这个
struct graphNode *createGraph(int nodes){
struct graphNode *graph = calloc(nodes, sizeof(*graph));
return graph;
}