//例9.10 建立一个输出学生学号、成绩的动态链表
#include<stdio.h>
#include<malloc.h>
struct STUDENT
{
long num;
float socre;
struct STUDENT* next;
};
int n = 0;
struct STUDENT* creat();
void output(struct STUDENT* p);
int main()
{
output(creat());
return 0;
}
struct STUDENT* creat()
{
struct STUDENT* head;
struct STUDENT* p1, * p2;
int len = sizeof(struct STUDENT);
p1 = p2 = (struct STUDENT*)malloc(len);
printf("enter num\\socre of student NO.1:\n");
scanf("%ld%f", &p1->num, &p1->socre);
head = 0;
while (p1->num != 0)
{
n++; //统计共输入多少个学生数据
printf("enter num\\socre of student NO.%d:\n", n + 1);
if (n == 1)
{
head = p1; //第一组学生的起始地址赋值给head
}
else
{
p2->next = p1; //将第40行代码新开辟的动态存储区的地址复制给p2的next成员(就是上一个节点的next)
p2 = p1; //将p2移向新建立的节点
}
p1 = (struct STUDENT*)malloc(len);
scanf("%ld%f", &p1->num, &p1->socre);
}
p2->next = 0;
return head;
}
void output(struct STUDENT* p) //将”creat“输出的”*head“参数的值作为output函数形参“*p”的值
{
printf("Now,these %d records are:\n", n);
while (p != 0)
{
printf("%ld%5.1f\n", p->num, p->socre);
p = p->next;
}
}
C程序设计(第四版) 谭浩强 例9.10 编写一个输出链表的函数(单向动态链表)
最新推荐文章于 2023-10-16 16:39:23 发布