gpt4 book ai didi

c - 填充链表的函数,但适用于 n 个列表类型

转载 作者:行者123 更新时间:2023-11-30 17:50:27 24 4
gpt4 key购买 nike

所以我想要做一个函数,给定一个节点,它将它放在最后一个位置。问题是我想做一个适用于我所有列表结构的函数。我该怎么做呢?到目前为止,我设法创建一个函数,将节点放在最后,但仅适用于一种类型的列表。这是代码:

void putList(PESPECIALIDADE *p){
int i = 1;
p->proximo = NULL;
ptr;
if(cabecaEspecialidade == NULL){
p->id=1;
cabecaEspecialidade = p;
}
else{
for(ptr=cabecaEspecialidade; ptr->proximo != NULL; ptr = ptr->proximo){
i++;
}
p->id=i+1;
ptr->proximo = p;
p->proximo=NULL;
}
}

最佳答案

如果您想要拥有许多不同内容的列表,常见的方法是使用公共(public)节点结构作为所有列表的基础。

struct base_node
{
struct base_node *next;
};

然后,您在用于列表的所有其他结构中首先拥有该结构:

struct some_node_data
{
struct base_node node; /* Note: not a pointer */

/* All other data... */
};

(注意:将基本节点结构作为新结构中的成员,这有点像 C++ 继承。)

现在您可以将指向上述结构的指针转换为指向 base_node 结构的指针,并使用它。

void add_tail(struct base_node **head, struct base_node *node)
{
/* Add `node` at the end of the list pointed to by `*head` */
}

/* ... */

struct some_node_data *some_data_head = NULL;

struct some_node_data *some_node = malloc(sizeof struct some_node_data);
add_tail((struct base_node *) &some_data_head, (struct base_node *) some_node);

关于c - 填充链表的函数,但适用于 n 个列表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17263413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com