c/c++语言开发共享处理链表数组

我的方法:

每个元素的固定长度(假设为20)数组是指向链表的第一个节点的指针。 所以我有20个不同的链表。

这是结构:

struct node{ char data[16]; struct node *next; }; 

我对该数组的声明

 struct node *nodesArr[20]; 

现在要将一个新节点添加到其中一个链表,我这样做:

 struct node *temp; temp = nodesArr[i]; // i is declared and its less than 20 addNode(temp,word); // word is declared (char *word) and has a value ("hello") 

addNode函数:

 void addNode(struct node *q, char *d){ if(q == NULL) q = malloc(sizeof(struct node)); else{ while(q->next != NULL) q = q->next; q->next = malloc(sizeof(struct node)); q = q->next; } q->data = d; // this must done using strncpy q->next = NULL; } 

并从链表列表中打印数据,我这样做:

 void print(){ int i; struct node *temp; for(i=0 ; i data); temp = temp->next; } } } 

现在编译器没有错误,程序运行,我将数据传递给它,当我打电话打印它不打印任何东西,??

更新::

在我编辑代码(thx for you)之后,我认为打印function中的问题,任何想法?

    问题在于addNode() 。 当列表为空时,您执行以下操作:

     q = malloc(sizeof(struct node)); 

    q的范围仅限于addNode() 。 您应该将addNode()声明为

     void addNode(struct node **q, char *d) 

    并相应地调整您的代码:

     *q = malloc(sizeof(struct node)); 

    等等…

    当您将struct node *q传递给addNode您将为其提供数组中元素的地址。 如果你在里面使用malloc ,那么你将覆盖这个变量q ,它是函数的本地变量,现在指向不同的变量,但你还没有改变原始数组。 尝试使用指向节点的指针( struct node **q )。

     void addNode(struct node *q, char *d){ if(q == NULL) q = malloc(sizeof(struct node)); 

    这是问题所在。

    q的新值永远不会离开函数,因此链接列表的数组永远不会更新。

    通常这里的解决方案是使用双指针:

     void addNode(struct node **q, char *d){ if(*q == NULL) *q = malloc(sizeof(struct node)); 

    并称之为:

     addNode(&nodesArr[i],word); 

    然后,如果malloc新节点,则数组中的值将设置为指向新节点。

    需要了解更多c/c++开发分享处理链表数组,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     struct node { int actual, estimated; char c; struct node *next; } *head[4], *var[4], *trav[4]; void insert_at_end (char c, int value, int value1) { struct node *temp; temp = head[i]; var[i] = (struct node *) malloc (sizeof (struct node)); var[i]->actual = value; //var1=(struct node *)malloc(sizeof(struct node)); var[i]->estimated = value1; var[i]->c = c; //printf("%d",var->estimated); if (head[i] == NULL) { head[i] = var[i]; head[i]->next = NULL; } else { while (temp->next != NULL) { temp = temp->next; } var[i]->next = NULL; temp->next = var[i]; } } 

      以上就是c/c++开发分享处理链表数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979667.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐