回复 9楼 yangfrancis
if(i==0){
head=p;
p=head->next;
}
else p=p->next;
//这个地方在上面赋值后,用p=p->next来用p指向原来的p中的next,在循环头给新p分配内存,有进行赋值与分配内存吧
程序代码: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编辑过]
