已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并,按学号升序排列。
2016-06-08 21:24
417 查看
#include <stdio.h> #include <stdlib.h> #define N 10 typedef struct student { int num; float score; struct student *next; }stu; stu *creat() { int i; stu *p,*head = NULL,*tail = head; for (i = 0; i < N; i++) { p = (stu *)malloc(sizeof(stu)); scanf("%d%f",&p->num,&p->score); p->next = NULL; if ( p->num <= 0) { free(p); break; } if(head == NULL) head = p; else tail->next = p; tail = p; } return head; } void print(stu *p) { while (p != NULL) { printf("%d\t%.2f\n",p->num,p->score); p = p->next; } } stu *link(stu *p1,stu *p2) { stu *p,*head; if ( p1->num < p2->num ) { head = p = p1; p1 = p1->next; } else { head = p = p2; p2 = p2->next; } while ( (p1 != NULL) && (p2 != NULL )) { if (p1->num < p2->num) { p->next = p1; p = p1; p1 = p1->next; } else { p->next = p2; p = p2; p2 = p2->next; } } if(p1 != NULL) p->next = p1; else p->next = p2; return head; } int main() { stu *a,*b,*c; printf("\n请输入链表a的信息,学号小于等于零时结束输入:格式(学号 成绩)\n"); a = creat(); printf("\n请输入链表b的信息,学号小于等于零时结束输入:格式(学号 成绩)\n"); b = creat(); printf("\n链表a的信息为:\n"); print(a); printf("\n链表b的信息为:\n"); print(b); c = link(a,b); printf("\n合并后的链表信息为:\n"); print(c); return 0; }
相关文章推荐
- 动态顺序表
- 模板
- 初识Linux
- linux-----强大的find
- 中国中产阶层的保守与彷徨
- 102. Binary Tree Level Order Traversal
- 局部变量,全局变量的应用
- 猜数字游戏
- 可变参数列表
- 函数指针
- 静态顺序表
- 有两个链表a,b,设结点包括学号,姓名。从a链表中删去与b链表中有相同学号的那些结点。
- 160. Intersection of Two Linked Lists [easy] (Python)
- 厨房有约 | 华人生活馆HuarenStore官方博客
- 团队冲刺(二)个人工作总结7
- "二分法"-"折半法"-查找算法-之通俗易懂,图文+代码详解-java编程
- UIImagePickerController.h SDK 翻译
- jsp中tag自定义标签
- svn+teamcity+YouTrack+Upsource搭建—写给明天工作室的小伙伴
- C++符号优先级