解题思路:话不多说看注释就行
注意事项:看注释咯
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct _node{
int id;
int grade;//前两个是结点所存的数据
struct _node *next;//指向下一个结点的指针
}Node;//这里用了typedef所以Node是类型而不是变量
int main()
{
int N,M;
int i;
scanf("%d %d",&N,&M);
Node *head1=NULL;//定义一个链表的头,它指向第一个结点
for(i=0;i<N;i++){//这里有明确的结点数量,所以用for循环
Node *p=(Node*)malloc(sizeof(Node));
scanf("%d %d",&p->id,&p->grade);
p->next=NULL;
Node *last=head1; //将链表的结点连接起来,需要遍历链表
if(last){
while(last->next){
last=last->next;
}
last->next=p;
}else{
head1=p;
}
}
Node *head2=NULL;
for(i=0;i<M;i++){
Node *p=(Node*)malloc(sizeof(Node));
scanf("%d %d",&p->id,&p->grade);
p->next=NULL;
Node *last=head2;
if(last){
while(last->next){
last=last->next;
}
last->next=p;
}else{
head2=p;
}
}
Node *last=head1;//注意这里需要再次定义last,因为上次定义在大括号中
while(last->next){//连接两个链表,先找到第一个链表的末端NULL,让它等于head2,实现连接
last=last->next;//需要注意这里结束的条件是last->next而不是last
}
last->next=head2;
//下面开始按照学号排序,采用选择排序
int t;
Node *min=head1;
for(min=head1;min;min=min->next){
for(last=min->next;last;last=last->next){//注意这里遍历链表结束的条件是last而不是last->next
if(min->id>last->id){//且注意这里每轮last的位置应该随min改变而改变
t=min->id;min->id=last->id;last->id=t;
t=min->grade;min->grade=last->grade;last->grade=t;
}
}
}
last=head1;
while(last){
printf("%d %d\n",last->id,last->grade);
free(last);
last=last->next;
}
return 0;
}
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复