动态链表之创建链表(头插法)

动态链表之创建链表(头插法)

创建链表,并采用头插法将新结点插入到head之后,输入完整的学生数据,构建动态链表。
算法工作示意图:
头插法创建链表工作示意图

#include <stdio.h>
#include <stdlib.h>

struct Student 
{
	char name[20];
	long num;
	float grades[5];
	struct Student *next;
};
typedef struct Student STU;
int main()
{
	STU *head, *p;
	int num;
	
	// 初始化head结点
	head = (STU *) malloc (sizeof(STU));
	head->next = NULL;
	
	// 插入法输入链表数据
	printf("请输入学号(小于或等于0则结束输入)");
	scanf("%ld", &num);
	while(num > 0)
	{
		p = (STU *) malloc (sizeof(STU));
		// 输入数据
		p->num = num;
		printf("请输入姓名:");
		scanf("%s", p->name);
		printf("请输入5门课的成绩(以空格分隔):");
		for (int i = 0; i < 5; i++)
			scanf("%f", &p->grades[i]);
		
		// 建立链表关联
		p->next = head->next;
		head->next = p;
		
		// 继续输入下一个num
		printf("请输入学号(小于或等于0则结束输入)");
		scanf("%ld", &num);	
	}
	
	// 遍历(访问)链表数据
	p = head->next;
	printf("学号\t姓名\t成绩\n");
	while (p != NULL)
	{
		printf("%ld\t%s\t%.1f\n",
			p->num, p->name, p->grades[0]); // 只输入1门课成绩
		p = p->next; // 意义上与p++相似,语法上不一样	 
	}
	return 0; 
}
  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值