解题思路:





注意事项:





参考代码:

#include<stdio.h>

#include<malloc.h>

typedef struct LNode{

     int no;                                         //序号

     int score;                                   // 分数

     struct LNode *next;                    //节点尾指针,指向下一节点的地址,必须定义

}LNode;


LNode *create(int x){       //创建链式线性表,因为返回的是指针类型,所以要用到 *

     LNode *p,*s,*h;

     int i;

     h=(LNode *)malloc(sizeof(LNode));   //申请一个表头节点,并对其进行初始化

     h->score=0;         

     h->next=NULL;       

     p=h;        

     for(i=0;i<x;i++){     

         s=(LNode *)malloc(sizeof(LNode));    //采用尾插法建立单链表,s为开始节点

         s->next=NULL;

         scanf("%d%d",&s->no,&s->score);       

         p->next=s;

         p=s;

    }

    return h;

}


int main(){

     LNode *h0,*h1,*h2,*h3,*b;

     int M,N,i,j,a[100],t;

     scanf("%d %d",&M,&N);

     h0=create(M);

     h2=h0;

     h3=h0;

     h1=create(N);

     for(i=0;i<M;i++)

         h0=h0->next;

     h0->next=h1->next;

     for(i=0;i<M+N;i++){

     h2=h2->next;

     a[i]=h2->no;

     }

     for(i=0;i<M+N-1;i++){      //利用选择排序法对序号进行排序,当然也可以用其他排序方法

         for(j=i+1;j<M+N;j++)

              if(a[j]<a[i]){

                     t=a[j];

                     a[j]=a[i];

                      a[i]=t;

             }

      }

     for(i=0;i<M+N;i++){

          b=h3->next;

          for(j=0;j<M+N;j++){

              if(b->no==a[i])

                     printf("%d %d\n",a[i],b->score);  //按照序号由小大大依次输出

              b=b->next;    

          }

     }

     return 0;

}


点赞(2)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论