解题思路:





注意事项:





参考代码:

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

}


 

0.0分

0 人评分

  评论区