关于新建链表结点的理解问题,求指正。
#include<stdio.h>#include<stdlib.h>
struct data{
int snum;
char sname[10];
int sage;
char ssex[2];
struct data *next;
};
struct data* DEAL(){
struct data *head,*data,*update,*output;
int num=1;
int ACK;
data=update=(struct data*)malloc(sizeof(struct data));
head=NULL;
while(1){
if(num==1){
data->snum=num;
printf("INPUT sname:");
scanf("%s",&data->sname);
printf("INPUT sage:");
scanf("%d",&data->sage);
printf("INPUT ssex:");
scanf("%s",&data->ssex);
head=data;
head->next=NULL;
printf("DO YOU WANT TO NEXT?(1-YES,0-NO)");
scanf("%d",&ACK);
if(ACK!=1){
return head;
}
num++;
}
system("CLS");
update=(struct data*)malloc(sizeof(struct data));
update->snum=num;
printf("INPUT sname:");
scanf("%s",&update->sname);
printf("INPUT sage:");
scanf("%d",&update->sage);
printf("INPUT ssex:");
scanf("%s",&update->ssex);
data->next=update;
data=update;
data->next=NULL;
printf("DO YOU WANT TO NEXT?(1-YES,0-NO)");
scanf("%d",&ACK);
if(ACK!=1){
return head;
}
num++;
}
}
int main(){
system("COLOR 0E");
system("CLS");
struct data *output;
for(output=DEAL();output!=NULL;output=output->next){
printf("%d %s %d %s\n",output->snum,output->sname,output->sage,output->ssex);
}
return 0;
}
这是近期写的一个动态单链表的例程,在对于这部分的理解,望得到他人指正,谢谢。
update=(struct data*)malloc(sizeof(struct data));
update->snum=num;
printf("INPUT sname:");
scanf("%s",&update->sname);
printf("INPUT sage:");
scanf("%d",&update->sage);
printf("INPUT ssex:");
scanf("%s",&update->ssex);
data->next=update;
data=update;
data->next=NULL;
对于这段代码,我是这么理解的,首先,申请一个连续的空间,并让update指向这个空间,然后是给update的成员变量赋值,把update指向的新分配的空间地址赋给data的next成员指针变量,算是给data开辟了新空间了,然后把update赋给data,这样一来,我想举个不太恰当的例子,update就算是一个织毛衣的线扣吧……(并没有织过毛衣,就是忽然想到这么个例子了)其实,我的主要问题也是在于“data=update;”这句上缺乏理解。