1 #include "head.h" 2 struct Student *creat() 3 { 4 struct Student *head, *p1, *p2;// 先开辟三个结构体指针,*head,(作为返回的头指针) 5 p1 = p2 =(struct Student *) malloc(LEN); 6 scanf_s("%s %f", p1->num, N, &p1->score);//先读取输入的信息,据读入的信息进行判断 7 head = NULL; // 先使得头指针指向空指针 8 n = 0; //用来计数多少个链表里的成员 9 while (strcmp(p1->num, "0") != 0) //根据读入的信息,“0”为输入终止标号,如果不为 10 //0,则进行链表增加操作 11 { 12 ++n; //不终止,说明要增加一位成员 13 if (n == 1) head = p1; //先把开始开辟的地址赋给头指针,因为接下来p1会后移, 14 //没有头指针信息 15 else p2->next = p1; //p1分两种情况,当n=1,p1赋给头指针,接下里,p1链接 16 //上一个指针p2->next; 17 p2= p1; //完成链接后p2后移到p1处。 18 p1 = (struct Student *)malloc(LEN); //然后p1继续开发内存存储新成员; 19 scanf_s("%s %f", p1->num, N, &p1->score);//读入新成员信息,返回到开头,进行判读 20 //读入的信息 21 } 22 p2->next = NULL; //是p2的next作为结束标志,注意,这里是不是p1,p1用来存储“0” 23 //终止条件了 24 return head; //返回头指针 25 }