C 编程为链表类型结构分配空间

Posted

技术标签:

【中文标题】C 编程为链表类型结构分配空间【英文标题】:C programming allocating space for a linked list type structure 【发布时间】:2022-01-02 05:46:15 【问题描述】:

您好,我刚开始尝试在 C 中实现某种列表,只是为了尝试学得更好。我目前没有代码,只是需要一些假设的帮助

#define MAX_LIST_SIZE 1024


typedef struct clist clist;

struct clist
   
   clist *next;
   char  *data; 
 


void add_to_list(char *str, clist *current)
   //what code goes in here
   im guessing some sort of malloc adding the strlen of str plus the sizeof the clist


int main()
   clist mylistofstrings;


如果你能回答这个问题,我的下一个问题是,有没有办法使用宏或其他东西来改变结构,这样你就可以添加如下字符串

clist mystrings = ADDSTRING("add this");
ADDTOLIST(mystrings,"second string");

【问题讨论】:

您需要分配一个节点 (struct clist),但不需要复制字符串。你可以复制指针 你能给我一个代码示例吗,如果我想让 clist->data 指向一个字符串,我在哪里为字符串分配空间 我只是说不需要分配任何东西,你需要做的就是复制指针(clist->data = str; 对不起,我对 C 很陌生,所以我意识到这对你来说可能是非常基础的。我可以继续添加链接的列表并尽可能多地添加新字符串。 clist->data = str , clist->next->data = str , clist-next->next->data = string 不,您需要分配这些节点。再说一遍,已经说过了。这不是 C 特定的。每种语言都是一样的。 【参考方案1】:

有趣的是,您必须注意一些要点:

如果您要传递对您的链表的引用:

    您需要首先为堆中的每个节点分配结构。避免堆栈粉碎。 您甚至可能不得不 malloc 字符串,再次避免堆栈粉碎。 然后,您必须将每个节点相互链接。

如果您只是为了好玩而这样做,并且您不打算将对您的结构的引用传递给不同的函数。那么你就不需要使用malloc了。直接初始化它们。

【讨论】:

以上是关于C 编程为链表类型结构分配空间的主要内容,如果未能解决你的问题,请参考以下文章

list结构用啥数据库

数组的动态分配

数据结构:第二章学习小结

数据结构java数组链表

算法——选择排序

Redis list数据类型