|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 编程小土豆 于 2019-8-9 15:45 编辑
这段代码看了一天,还是有几个地方没搞懂,希望大家帮忙讲一下:
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #define LEN sizeof(struct student)
- struct student *creat(); //创建链表
- void print(struct student *head); //打印链表
- struct student
- {
- int num;
- float score;
- struct student *next;
- };
- int n; //全局变量,用来记录存放了多少数据。
- void main()
- {
- struct student *stu;
- stu = creat();
- print( stu );
- printf("\n\n");
- system("pause");
- }
- struct student *creat()
- {
- struct student *head;
- struct student *p1, *p2;
-
- p1 = p2 = (struct student *)malloc(LEN);
- printf("Please enter the num :");
- scanf("%d", &p1->num);
- printf("Please enter the score :");
- scanf("%f", &p1->score);
- head = NULL;
- n = 0;
-
- while( p1->num )
- {
- n++;
- if( 1 == n )
- {
- head = p1;
- }
- else
- {
- [color=Red]p2->next = p1[/color];
- }
- [color=Red]p2 = p1[/color];
- p1 = (struct student *)malloc(LEN);
- printf("\nPlease enter the num :");
- scanf("%d", &p1->num);
- printf("Please enter the score :");
- scanf("%f", &p1->score);
- }
- p2->next = NULL;
- return head;
- }
- void print(struct student *head)
- {
- struct student *p;
- printf("\nThere are %d records!\n\n", n);
- p = head;
- if( head )
- {
- do
- {
- printf("学号为 %d 的成绩是: %f\n", p->num, p->score);
- p = p->next;
- }while( p );
- }
- }
复制代码
视频教程里写的是:“如果输入的p1->num=0,则应链入第二个结点(n=2),将新结点的地址赋给第一个结点的next成员。 接着使p2 = p1,也就是使p2指向刚才建立的结点”
标红的这两条,p1和p2到底哪个是新结点呀,谁是第一个,谁是第二个呢? |
|