| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4577 人关注过本帖
标题:把结构体数组连接成链表问题;
只看楼主 加入收藏
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
收藏
得分:0 
回复 9楼 yangfrancis
if(i==0)
     {
     head=p;                        
     p=head->next;
     }
     else p=p->next;
//这个地方在上面赋值后,用p=p->next来用p指向原来的p中的next,在循环头给新p分配内存,有进行赋值与分配内存吧
2018-01-06 23:19
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:10 
以下是引用TIMFannie在2018-1-6 23:19:46的发言:

if(i==0)
     {
     head=p;                        
     p=head->next;
     }
     else p=p->next;
//这个地方在上面赋值后,用p=p->next来用p指向原来的p中的next,在循环头给新p分配内存,有进行赋值与分配内存吧



循环头刷新了p节点地址,新地址和head节点就没有关联关系了,反复数次会出现多个也指针。
我是这么猜的

剑栈风樯各苦辛,别时冰雪到时春
2018-01-07 08:12
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
收藏
得分:0 
回复 12楼 林月儿
好像是这么回事,如果结合我这个要怎么改更好,有点糊涂
2018-01-08 11:21
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:5 
回复 13楼 TIMFannie
程序代码:
struct studentNode *CreateLinkList(struct student s[], int n)   /以下为把结构体数组链接成一串链表的函数,结构体数组s[]已知/
{  struct studentNode *head,*p;                                    
    if(n==0)return null;
    for(int i=0;i<n;i++)
   {
     p=(studentNode *)malloc(sizeof(struct studentNode));
     for(int j=0;j<10;j++)          /从这里把结构体数组各成员放进链表的各个结点/
     p->name[j]=s[i].name[j];
     p->birth=s[i].birth;            /到这里单个结构体的成员全部放入一节点/
     if(i==0)
     {
     head=p;                           /可能是这个地方有问题,我想把各个节点连接起来,但没有连接成,我看不出哪里出问题/

     }

 p=p->next;/*这句赋值的意义是把p->next指针所指位置上的数据赋值给p.前面你对p->name  p->birth都有赋值初始化,唯独没有对p->next赋值,也就是说此时p->next上保存的数据是随机的。我们的目的是要往p->next写入一个struct studentNode结构体变量的地址(指针)信息。*/
   }
    p=null;
   return head;
  }

在你的代码基础上修改,很绕,易出错。下面我写了一段,但没测试,没把握对不对。
程序代码:
struct studentNode *CreateLinkList(struct student s[], int n)   /以下为把结构体数组链接成一串链表的函数,结构体数组s[]已知/
{  struct studentNode *head=NULL,**p=NULL;  /*声明一个指针,他是指向{结构体指针}的指针*/                                  
    if(n==0)return null;
    for(int i=0;i<n;i++)
   {
     *p=(studentNode *)malloc(sizeof(struct studentNode));/*通过*p来往p->next写入数据*/
     for(int j=0;j<10;j++)          
    *p->name[j]=s[i].name[j];
     *p->birth=s[i].birth;          
     if(i==0)
     {
     head=*p;                         

     }

 p=&p->next;/*把p->next的地址保存到p上。*/
   }
    *p=null;/*把链表的最后一个结点的->next赋值为NULL*/
   return head;
  }

我个人强烈建议楼主换一种稍微麻烦点的写法:链表头单拎出来写,
程序代码:
struct studentNode *CreateLinkList(struct student s[], int n)   /以下为把结构体数组链接成一串链表的函数,结构体数组s[]已知/
{                               
    if(n==0)return null;
   struct studentNode *head=(studentNode *)malloc(sizeof(struct studentNode));
     for(int j=0;j<10;j++)          
     head->name[j]=s[i].name[j];
     head->birth=s[i].birth;  
   struct studentNode*p=head;
    for(int i=1;i<n;i++)
   {
    p->next=(studentNode *)malloc(sizeof(struct studentNode)); 
     for(int j=0;j<10;j++)          
     p->next->name[j]=s[i].name[j];
     p->next->birth=s[i].birth;
    p=p->next;
    }
    p->next=null;
   return head;
  }


[此贴子已经被作者于2018-1-8 14:33编辑过]


φ(゜▽゜*)♪
2018-01-08 14:30
TIMFannie
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2017-10-15
收藏
得分:0 
回复 14楼 书生牛犊
第一个代码好像还是有点问题,第二个可以通过。不过为什么head单独拿出来赋值?
2018-01-08 19:13
快速回复:把结构体数组连接成链表问题;
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047537 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved