数据结构——学生单链表

 根据用户输入的学生人数n(n≥3)及每个学生姓名和成绩建立一个单链表,并按学生成绩递减排序,然后按名次输出所有学生的姓名和成绩。

#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
typedef struct node
{
	char name[10];		//姓名
	int score;			//成绩域
	struct node* next;		//指针域
} StudList, * SLink;              //学生单链表结点类型

SLink CreateStudent()            //采用交互式方式创建学生单链表。
{
	int n, i;
	StudList* s, * tc;  //结点
	SLink sl;          //指针
	tc = (StudList*)malloc(sizeof(StudList));   //创建头结点

	sl = tc;
	cout << "输入学生人数:";
	cin >> n;
	for (i = 0; i < n; i++)
	{
		s = (StudList*)malloc(sizeof(StudList));
		cout << "第" << i + 1 << "个学生的姓名与成绩:";
		cin >> s->name;
		cin >> s->score;
		tc->next = s;     //将S插入tc后
		tc = s;
	}
	tc->next = NULL;  //尾结点next域置为空
	return sl;        //返回学生链表的头指针
}
void DestroyList(SLink L)         //销毁学生单链表。
{
	StudList* pre = L, * p = pre->next;
	while (p != NULL)
	{
		free(pre);
		pre = p; p = p->next;
	}
	free(pre);
}
void DispList(SLink L)           //输出学生单链表。
{
	StudList* p = L->next;
	int i = 1;
	cout << "学生名次、姓名、成绩为" << endl;
	while (p != NULL)
	{
		cout << "  " << i++ << "  ";
		cout << p->name << "  ";
		cout << p->score << endl;
		p = p->next;
	}
}
void SortList(SLink L)          //将学生单链表按成绩递减排序。
{
	StudList* p, * pre, * q;
	p = L->next->next;    //p指向L的第二个数据结点
	L->next->next = NULL;   //构造只含有一个数据节点的有序表
	while (p != NULL)
	{
		q = p->next;     //q保存p结点后继结点的指针
		pre = L;         //从有序表开头进行比较,pre指向p的前驱结点
		while (pre->next != NULL && pre->next->score > p->score)
			pre = pre->next;   //寻找插入的位置,即p的前驱结点pre;
		p->next = pre->next;   //pre之后插入p;
		pre->next = p;
		p = q;
	}

}
void main()
{
	SLink st;//指针
	st = CreateStudent();
	SortList(st);
	DispList(st);
	cout << endl;
	DestroyList(st);
	system("pause");
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风残月Lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值