解题思路:

先将两个链表合并成一个,再对此链表进行选择排序。

注意事项:

注意链表循环的起始值。

参考代码:

#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分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论