C程序设计(第四版) 谭浩强 例9.10 编写一个输出链表的函数(单向动态链表)

//例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;
	}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值