解题思路:
先将两个链表合并成一个,再对此链表进行选择排序。
注意事项:
注意链表循环的起始值。
参考代码:
#include <stdio.h>
#include<malloc.h>
typedef struct Stu{
int num;
int score;
struct Stu *next;
}stu;
//创建链表
stu *creat(int n){
stu *h=(stu *)malloc(sizeof(stu));
stu *p=h,*q;
for(int i=0;i<n;i++){
q=(stu *)malloc(sizeof(stu));
scanf("%d %d",&(q->num),&(q->score));
p->next=q;
p=q;
}
p->next=NULL;
return h;
}
//打印
void print(stu *h){
stu *p=h->next;
while(p!=NULL){
printf("%d %d\n",p->num,p->score);
p=p->next;
}
}
//排序
void sort(stu *a){
int i,min,temp;
stu *p=a,*q,*dex;
while(p->next!=NULL){
p=p->next;
q=p->next;
min=p->num;//保存学号最小值
dex=p;//记录学号最小值指针
while(q!=NULL){
if(q->num<min){
min=q->num;
dex=q;
}
q=q->next;
}
if(p->num>dex->num){
temp=p->num;//交换学号值
p->num=dex->num;
dex->num=temp;
temp=p->score;//交换分数值
p->score=dex->score;
dex->score=temp;
}
}
}
//合并
stu *merge(stu *a,stu *b){
stu *p=a->next,*q=b->next;
while(p->next!=NULL){
p=p->next;
}
p->next=q;
return a;
}
int main(){
stu *a;
stu *b;
int m,n;
scanf("%d%d",&n,&m);
a=creat(n);
b=creat(m);
a=merge(a,b);
sort(a);
print(a);
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复