解题思路:





注意事项:





参考代码:

#include<stdio.h>

#include<malloc.h>


typedef struct Lnode{

     int no;

     int num;

     struct Lnode *next;

}*LinkList ,Lnode;


LinkList creat(int n){

     LinkList L;

     Lnode *p,*q;

     L=(LinkList)malloc(sizeof(Lnode));

     L->next=NULL;

     p=L;

     int x,y,i=0;

     while(i++<n){

         scanf("%d %d",&x,&y);

         q=(Lnode *)malloc(sizeof(Lnode));

         q->no=x;

         q->num=y;

         q->next=p->next;//就是普通的给链表在一个节点p后面增加一个接q

         p->next=q;

         p=q;

     }

     return L;


output(LinkList L){//LinkList L,不必加&,也可以有效的修改L,并且保存到L

     Lnode *p;

     p=L->next;//L是头指针,没有数据 

     while(p){//p相当于p!=NULL 

         printf("%d %d\n",p->no,p->num);

         p=p->next;

     }

}


LinkList Together(LinkList L,LinkList L2){

     Lnode *p;

     p=L->next;

     while(p->next!=NULL){//最后跳出循环的是最后一个节点 

         p=p->next;    

     }

     p->next=L2->next;

     return L;


order(LinkList L){

     Lnode *p,*q,*min;//min是用来保存每次循环中的学号最小节点,因为要互相替换 

     p=L->next;

     int n,g,t;

     while(p){

         min=p;//假设最小学号节点为p;此时的p;就好像数组中的a[0]

         t=p->no;//t为a[0]的值

         q=p->next;

         while(q){

             if(q->no<t){

                 min=q;

                 t=q->no;

             }

             q=q->next;

         }

         n=p->no;//筛选出来的除此之外的后面的最小的节点与此时的p节点互换

         g=p->num;

         p->no=min->no;

         p->num=min->num;

         min->no=n;

         min->num=g;

         p=p->next;

     }

     output(L);


int main(){

LinkList L,L2;

int n,m;

scanf("%d %d",&n,&m);

L=creat(n);

L2=creat(m);

L=Together(L,L2);

order(L);

return 0;

}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论