原题链接:[编程入门]链表合并
#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先学习了这个程序
0.0分
10 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复