学生成绩系统三代目

描述

已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。。

输入

第一行,a、b两个链表元素的数量N、M,用空格隔开。接下来N行是a的数据然后M行是b的数据每行数据由学号和成绩两部分组成

输出

按照学号升序排列的数据

输入样例 1 

2 3
5 100
6 89
3 82
4 95
2 10

输出样例 1

2 10
3 82
4 95
5 100
6 89

输入样例 2 

3 3
1 85
2 90
3 78
6 98
5 42
4 90

输出样例 2

1 85
2 90
3 78
4 90
5 42
6 98

结构体类型+冒泡排序法

#include 
using namespace std;
struct Student
{
	int number;
	int score;
};
int main()
{
	Student a[100], b[100];
	int N, M;
	cin >> N >> M;
	for (int i = 1; i <= N;i++)
	{
		cin >> a[i].number >> a[i].score;
	}
	for (int i = 1; i <= M; i++)
	{
		cin >> b[i].number >> b[i].score;
	}
	for (int i = 1; i <= M; i++)
	{
		a[N + i] = b[i];
	}
	for (int i = 1; i < N + M; i++)
	{
		for(int j = 1; j <=N + M - i;j++ )
		{
			if (a[j].number > a[j + 1].number)
			{
				Student t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
	for (int i = 1; i <= N + M; i++)
	{
		cout << a[i].number << " " << a[i].score;
		cout << endl;
	}
	return 0;
}

链表问题我没弄懂,等弄懂再说。

 

问题点:

①:用结构体变量和指向结构体变量的指针构成链表

链表是一种常见的重要的数据结构。

学生成绩系统三代目_第1张图片

 如图表示最简单的一种链表(单向链表)的结构。链表有一个“头指针”变量,图中以head表示,它存放一个地址。该地址指向一个元素。链表中的每一个元素称为“结点”,每个结点都包括两个部分:第一部分为用户需要用的实际数据,第二个部分为下一个结点的地址。

可以看出,head指向第1个元素,在第1个元素中存放了第2个元素的地址,因此,它指向第2个元素,同样,第2个元素指向第3个元素......直到最后一个元素。最后一个元素不再指向其他元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。

可以看到,链表中各元素在内存中的存储单元可以是不连续的。要找到某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。

可以看到,这种链表的数据结构,必须利用结构体变量和指针才能实现。可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。

struct Student

{int num;

float score;               //成员num和score是用户需要用到的数据

Student *next;         //next指向Student结构体变量,可以存放下一个结点的地址

};

 

你可能感兴趣的:(ACM作业,c++)