解题思路:话不多说看注释就行

注意事项:看注释咯

参考代码:

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

3 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论