几天来,我一直在用 C 编写 DisjointSet 作业。我了解函数 find(w/和 w/o 路径压缩),在对集合执行并集时在函数链接中使用等级。但我对 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 中初始化类数组的理解?
最佳答案
嗯……用
malloc(sizeof(DisjointSet))
您为 DisjointSet 类型的一个对象保留空间。要为 20 个对象分配空间,您需要乘以 ...
malloc(20 * sizeof(DisjointSet))
并且,一旦你在一个数组中有 20 个对象,数组就会从 0 到 19。
关于c - DisjointSet 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129682/