我正在尝试设计一个类似数据结构的二叉树,除了每个节点可以拥有的子节点没有限制。现在,在每个节点中,我可以这样声明节点结构:
struct node {
int id;
int num_children;
struct node ** child;
};
我的问题是有没有办法避免使用:
首先分配固定数量的子指针,并添加一个成员来存储列表的当前容量。当您向列表添加子项时,如果列表是容量,则大小加倍。这最大限度地减少了您需要进行的重新分配的数量。
因此节点被修改为如下所示:
struct node {
int id;
int capacity;
int num_children;
struct node ** child;
};
创建节点:
struct node newnode = malloc(sizeof *newnode);
newnode->num_children = 0;
newnode->capacity = 10;
newnode->child = malloc(sizeof *newnode->child * newnode->capacity);
要在容量满时添加孩子:
if (current->capacity == current->num_children) {
current->capacity *= 2;
current->child = realloc(current->child , sizeof *current->child * newnode->capacity);
}
current->child[current->num_children++] = new_child;
注意:为简洁起见,省略了错误检查。