1. #include <stdio.h>
  2. #include <malloc.h>
  3. typedef struct student {
  4. double number;
  5. double grade;
  6. struct student * next;
  7. }*node, Node; //结点
  8. node creat( int); //创建链表函数
  9. void output(node); //输出函数
  10. void order( node, node); //排序函数
  11. void swap (node,node);
  12. int main(){
  13. int n, m; //a ,b
  14. node head1, head2; //指向头节点的指针
  15. scanf( "%d%d", &n, &m );
  16. head1 = creat( n ); //创建链表a
  17. head2 = creat( m ); //创建链表b
  18. order( head1, head2 ); //排序
  19. return(0);
  20. }
  21. /*-------------------------------------------------------------*/
  22. node creat( int n ){
  23. node h; //头结点指针
  24. h = (node) malloc( sizeof(Node) ); //创建头结点,h为指向头节点的指针
  25. h->next = NULL; //头节点指向NULL代表空链表
  26. node q = h; //q为尾指针,指向头节点,代表链表为空
  27. node p;
  28. for ( int i = 0; i < n; i++ ){ //创建n个结点
  29. p = (node) malloc( sizeof(Node) ); //申请节点空间
  30. scanf( "%lf%lf", &(*p).number, &(*p).grade ); //输入学号,成绩
  31. //采用后差法插入节点
  32. q->next=p; //前一个尾结点指向当前结点
  33. p->next=NULL; //当前结点指向NULL
  34. q = p; //尾指针指向当前结点
  35. }
  36. return h; //返回头结点
  37. }
  38. void output( node l ) //输出链表每个结点的信息
  39. {
  40. l = l->next;
  41. node q; //用于释放结点
  42. while ( l != NULL )
  43. {
  44. printf( "%.0f %0.f\n", l->number, l->grade );
  45. q=l;
  46. l = l->next;
  47. free(q); //释放结点
  48. }
  49. }
  50. //交换函数
  51. void swap(node n, node m){
  52. double t;
  53. t=(*n).number;
  54. (*n).number=(*m).number;
  55. (*m).number=t;
  56. t=(*n).grade;
  57. (*n).grade=(*m).grade;
  58. (*m).grade=t;
  59. }
  60. //冒泡排序
  61. void order (node l1, node l2){
  62. int x;
  63. node temp0=l1,temp1,temp2;
  64. while (temp0->next!=NULL){
  65. temp0=temp0->next;
  66. }
  67. temp0->next=l2->next;
  68. free(l2);
  69. while (1){
  70. x=1;
  71. temp1=l1->next; temp2=temp1->next;
  72. while (temp2 != NULL){
  73. if (temp1->number > temp2->number){
  74. swap(temp1,temp2);
  75. x=0;
  76. }
  77. temp1=temp1->next;
  78. temp2=temp2->next;
  79. }
  80. if (x) break;
  81. }
  82. output(l1);
  83. }
点赞(0)
 

0 分

0 人评分

 

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论