我已经在C中进行了几天的DisjointSet分配。我理解函数find(w /和w / o路径压缩),在集合上执行union时使用函数链接中的rank。但是我遇到了C语法问题。
我们必须创建一个包含该组的等级和密钥的记录数组。所以我的结构看起来像:
typedef struct DisjointSet_t {
int data;
int key;
} DisjointSet;
我的问题是声明数组操纵集合。我初始化集合的数组有问题。这是CreateSet代码的片段:
static DisjointSet *S;
void CreateSet(int numElements){
DisjointSet *t;
if (numElements > 0){
t = (DisjointSet *)malloc(sizeof(DisjointSet));
}
if(S != NULL){
S = t[numElements+1];
}
}
如果我用Java实现它,我认为它会更容易一些。我怎样才能改善这个?我是否遗漏了一些关于如何在C语言中初始化类数组的内容?
答案 0 :(得分:2)
如果您尝试分配数组,则需要为所有数组元素分配空间:malloc(sizeof(DisjointSet) * numElements)
。
此外,您可以指定S作为Jeremy Simon描述的。
答案 1 :(得分:2)
嗯...带
malloc(sizeof(DisjointSet))
您为DisjointSet类型的一个对象保留空间。要为20个对象分配空间,您需要乘以...
malloc(20 * sizeof(DisjointSet))
并且,一旦你有20个对象,在一个数组中,数组从0到19。
答案 2 :(得分:1)
变量S和t都是DisjointSet *类型,所以你应该只能将t分配给S.
if (S != NULL)
{
S = t;
}
您还需要将静态S初始化为NULL
static DisjointSet *S = NULL;