解题思路:

注意事项:

参考代码:

#include <stdio.h>
#include <malloc.h>

typedef struct student
{
	int id;
	int score;
	struct student* next;
}Stu, * stu;

stu creat(int n)
{
	stu head = (stu)malloc(sizeof(Stu));
	if (head==NULL)
	{
		return NULL;
	}
	stu r = head;
	stu s;
	//尾插法
	for (int i = 0; i < n; i++)
	{
		s = (stu)malloc(sizeof(Stu));
		if (s==NULL)
		{
			return NULL;
		}
		scanf("%d%d", &s->id, &s->score);
		r->next = s;
		r = s;
		s->next = NULL;
	}
	return head;
}

void output(stu head)
{
	head = head->next;
	stu p;
	while (head!= NULL)
	{
		printf("%d %d\n", head->id, head->score);
		p = head;
		head = head->next;
		free(p);
	}	
}

stu connect(stu head1, stu head2)
{
	stu p = head1;//指向头结点
	while (p->next)//指向尾结点
	{
		p = p->next;
	}
	p->next = head2->next;//链表1连接链表2
	return head1;
}

void sort(stu head)
{
	
	stu rear = head;//创建一个指向头结点的指针
	//选择排序法
	while (rear->next)
	{
		//查找最小值
		stu q = rear->next;
		stu per = rear;//指向q的前驱结点
		stu min = rear->next;
		stu permin = rear;//指向最小值的前驱结点
		while (q)
		{
			if (q->id < min->id)
			{
				min = q;
				permin = per;
			}
			per = q;
			q = q->next;
		}
		//将最小值插入合适的位置
		permin->next = min->next;
		min->next = rear->next;
		rear->next = min;
		//
		rear = rear->next;
	}
}

int main()
{
	int n = 0, m = 0;
	scanf("%d%d", &n, &m);
	stu head1 = NULL;
	stu head2 = NULL;
	stu head3 = NULL;
	head1=creat(n);
	head2=creat(m);	
	head3 = connect(head1, head2);
	sort(head3);
	output(head3);
	return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论