在C中动态定义图形

时间:2016-01-10 20:44:33

标签: c memory dynamic graph malloc

我在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;
}

1 个答案:

答案 0 :(得分:1)

由于graphNode结构包含邻居指针数组,您需要做的就是为graphNode数组分配空间,这是第一个malloc所做的。

鉴于您希望所有邻居指针都初始化为NULL,我会将malloc更改为calloc(使内存自动归零)。结果代码如下所示

struct graphNode *createGraph(int nodes){
    struct graphNode *graph = calloc(nodes, sizeof(*graph));
    return graph;
}