解题思路:
先将两个链表合并成一个,再对此链表进行选择排序。
注意事项:
注意链表循环的起始值。
参考代码:
#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 人评分