用链表储存学生信息然后排序输出

题目:4.建立一个链表,每个结点包括:学号,姓名,年龄,性别。要求输入3个人的信息,将他们按照年龄正序/逆序排序输出他们的信息。
下面是代码:
结构体模块:

typedef struct Student{	
	long num;
	char name[8];
	int age;
	char sex[5];
	Student *next;
}stu;

初始化模块

void init(stu **pNode,int n){
	int i = 1;
	while (i<=n){
		stu *node = *pNode;
		stu *temp;
		if (*pNode == NULL){
			*pNode = (stu *)malloc(sizeof(stu));
			long num;
			printf("输入第%d个学生学号:", i);
			scanf("%ld", &num);
			(*pNode)->num = num;
			char name[10];
			printf("输入第%d个学生姓名:", i);
			scanf("%s", (*pNode)->name);
			int age;
			printf("输入第%d个学生年龄:", i);
			scanf("%d", &age);
			(*pNode)->age = age;
			char sex[5];
			printf("输入第%d个学生性别:", i);
			scanf("%s", (*pNode)->sex);
			(*pNode)->next = NULL;
			i++;
		}
		else{
			node = *pNode;
			while (node->next != NULL){
				node = node->next;
			}
			temp = (stu *)malloc(sizeof(stu));
			long num;
			printf("输入第%d个学生学号:", i);
			scanf("%ld", &num);
			temp->num = num;
			char name[10];
			printf("输入第%d个学生姓名:", i);
			scanf("%s", temp->name);
			int age;
			printf("输入第%d个学生年龄:", i);
			scanf("%d", &age);
			temp->age = age;
			char sex[5];
			printf("输入第%d个学生性别:", i);
			scanf("%s", temp->sex);
			temp->next = NULL;
			node->next = temp;
			i++;
		}
	}
}

排序模块

stu *paixu(stu *pNode){
	stu *node1 = (stu*)malloc(sizeof(stu));
	stu *node2 = (stu*)malloc(sizeof(stu));
	for (node1 = pNode; node1 != NULL; node1 = node1->next){
		for (node2 = node1->next; node2 != NULL; node2 = node2->next){
			if (node1->num > node2->num){
				stu *temp = (stu*)malloc(sizeof(stu));
				temp->num = node1->num;
				*temp->name = *node1->name;
				temp->age = node1->age;
				*temp->sex = *node1->sex;
				node1->num = node2->num;
				*node1->name = *node2->name;
				node1->age = node2->age;
				*node1->sex = *node2->sex;
				node2->num = temp->num;
				*node2->name = *temp->name;
				node2->age = temp->age;
				*node2->sex = *temp->sex;
			}
		}
	}
	return pNode;
}

遍历函数

void bianli(stu *pNode){
	stu *node;
	node = pNode;
	printf("学号\t姓名\t年龄\t性别\t\n");
	while(node->next != NULL){
		printf("%ld\t", node->num);
		printf("%s\t", node->name);
		printf("%d\t", node->age);
		printf("%s\t", node->sex);
		printf("\n");
		node = node->next;
	}
	printf("%ld\t", node->num);
	printf("%s\t", node->name);
	printf("%d\t", node->age);
	printf("%s\t", node->sex);
	printf("\n");
}

主函数

int _tmain(int argc, _TCHAR* argv[])
{
	int n;
	printf("请输入要存入信息的人数:");
	scanf("%d", &n);
	stu *head = NULL;
	init(&head,n);
	stu *newhead = paixu(head);
	bianli(newhead);
	system("pause");
	return 0;
}

测试结果:(汉字输入会有一个字乱码,正在修改)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值