#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
    int id;
    int score;
    struct student *next;
}student;
student *input(int n)//输入函数
{
    student *head,*p1,*p2;
    head=0;
    for(int i=0;i<n;i++)
    {
        p1=(student*)malloc(sizeof(student));
        scanf("%d%d",&(p1->id),&(p1->score));
        if(head==0)
        {
            head=p1;
            p2=p1;
        }
        else
        {
            p2->next=p1;
            p2=p1;
        }
    }
    p2->next=0;
    return head;
}
void connect(student *head1,student *head2)//连接函数,将第二个链表的地址赋给第一个的结尾
{
    student *p;
    p=head1;
    while(p->next!=0)
    {
        p=p->next;
    }
    if(p->next==0)
    {
        p->next=head2;
    }
}
void sort(student *head,int n)//排序函数
{
    student *p1,*p2;
    p1=head;
    p2=head;
    int temp;
    for(int i=0;i<n;i++)//利用冒泡法将两个学号比较,如果后面的学号比较小,将两个学号进行交换
    {
        for(int j=i+1;j<n;j++)
        {   
            p2=p2->next;
            if(p1->id>p2->id)
            {
                temp=p1->id;
                p1->id=p2->id;
                p2->id=temp;
                temp=p1->score;//注意成绩也需要交换
                p1->score=p2->score;
                p2->score=temp;
            }
        }
        p1=p1->next;
        p2=p1;
    }
}
void output(student *h)//输出函数
{   
    student *p;//用来释放结点
    while(h!=0)
    {
        printf("%d %d\n",h->id,h->score);
        p=h;
        h=h->next;
        free(p);//释放结点
    }
}
int main()
{
    student *head1,*head2;
    int m,n;
    scanf("%d %d",&m,&n);
    head1=input(m);
    head2=input(n);
    connect(head1,head2);
    sort(head1,m+n);
    output(head1);
    return 0;
}

参考:https://www.zhihu.com/question/53645056先学习了这个程序

点赞(9)
 

0.0分

10 人评分

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

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

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

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

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

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

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

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

评论列表 共有 5 条评论

uq_93509428540 2年前 回复TA
@uq_93509428540 冒泡这样写的
uq_93509428540 2年前 回复TA
void sort(student *head,int n)//排序函数
{
    student *p1,*p2,*l;
    p1=head;
    p2=head;
    int temp;
  
    for(int i=0;i<n-1;i++)//利用冒泡法将两个学号比较,如果后面的学号比较小,将两个学号进行交换
    {
    	int flag=0;
        for(int j=0;j<n-i-1;j++)
        {   
            p2=p2->next;
            if(p1->id>p2->id)
            {
                temp=p1->id;
                p1->id=p2->id;
                p2->id=temp;
                temp=p1->score;//注意成绩也需要交换
                p1->score=p2->score;
                p2->score=temp;
                flag=1;
            } 
            p1=p1->next;
           
        }
东星耀阳 3年前 回复TA
typedef struct student
{
    int id;
    int score;
    struct student *next;
}student;
这么写 student变成student没啥用啊
546672164 6年前 回复TA
void connect(student *head1,student *head2)//连接函数,将第二个链表的地址赋给第一个的结尾
{
        student *p;
        p=head1;
        while(p!=0)
        {
                p=p->next;
        }
        if(p==0)
        {
                p=head2;
        }
}
31行的函数这么写为什么不对?麻烦问一下
maxiao 6年前 回复TA
新手,有什么不足的请大神指出。