与DisjointSet的麻烦

时间:2010-11-09 01:25:25

标签: c arrays

我已经在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语言中初始化类数组的内容?

3 个答案:

答案 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;