原题链接:[编程入门]链表合并
解题思路:
链表的优势在于插入数据时的高效性
注意事项:
单向链表节点之间的关系就像糖葫芦一样,一个连着一个,想吃(访问)他们其中的一个就得先访问前面的节点,将节点串一起的“棍子”就是结构体里的指针next。
(这里每个链表的第一个节点不存储数据)
参考代码:
#include<stdio.h> #include<string.h> #include<ctype.h> #include<stdlib.h> struct note { int num; int score; struct note* next; };//创建链表节点的结构体(节点内部含有数据) struct note new1(int n) { struct note* rear,hearder; hearder.next = NULL; rear = &hearder; hearder.num = -1; for (int i = 0; i < n; i++) { int num0,score0; scanf("%d %d",&num0,&score0); struct note* newnote = (struct note*)malloc(sizeof(struct note)); newnote->num = num0; newnote->score = score0; newnote->next = NULL; rear->next = newnote; rear = newnote; } return hearder;//返回第一个节点(第一个节点不存储数据) }//创建新链表的函数 void sort1(struct note *hearder) { struct note* rear = hearder; struct note* i = hearder; i->num = -1; while (rear != NULL) { for (i = hearder; i != rear; i = i->next) { if (i->num > rear->num) { struct note tmp; tmp.num = i->num; tmp.score = i->score; tmp.next = NULL; i->num = rear->num; i->score = rear->score; rear->num = tmp.num; rear->score = tmp.score; continue; } } rear = rear->next; } }//将链表按学号从小到大排序的函数 int main() { int n1, n2; scanf("%d %d", &n1, &n2); struct note note1 = new1(n1); struct note note2 = new1(n2); for (struct note* i = ¬e1; i != NULL;i = i->next) if (i->next == NULL) { i->next = note2.next; break; }//将两个链表连接在一起(注意不要将首节点也接上去) sort1(¬e1); for (struct note* i = ¬e1; i != NULL; i = i->next) if (i->num != -1) printf("%d %d\n", i->num, i->score);//打印 return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复