02-线性结构1 两个有序链表序列的合并(15 分)

梦里梦外; 2022-05-27 12:15 257阅读 0赞
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef int ElementType;
  4. typedef struct Node *PtrToNode;
  5. struct Node
  6. {
  7. ElementType Data;
  8. PtrToNode Next;
  9. };
  10. typedef PtrToNode List;
  11. List Read(); /* 细节在此不表 */
  12. void Print( List L ); /* 细节在此不表;空链表将输出NULL */
  13. List Merge( List L1, List L2 );
  14. int main()
  15. {
  16. List L1, L2, L;
  17. L1 = Read();
  18. L2 = Read();
  19. L = Merge(L1, L2);
  20. Print(L);
  21. Print(L1);
  22. Print(L2);
  23. return 0;
  24. }
  25. /* 你的代码将被嵌在这里 */
  26. List Read()
  27. {
  28. List head,p,q;
  29. head = (List)malloc(sizeof(struct Node));
  30. head->Next = NULL;
  31. q = head;
  32. int n,x;
  33. scanf("%d",&n);
  34. int i;
  35. for(i=0; i<n; i++)
  36. {
  37. p = (List)malloc(sizeof(struct Node));
  38. scanf("%d",&x);
  39. p->Next = NULL;
  40. p->Data = x;
  41. q->Next = p;
  42. q = p;
  43. }
  44. return head;
  45. }
  46. void Print( List L )
  47. {
  48. L = L->Next;
  49. if(!L)
  50. printf("NULL");
  51. while(L)
  52. {
  53. printf("%d ",L->Data);
  54. L = L->Next;
  55. }
  56. printf("\n");
  57. }
  58. List Merge( List L1, List L2 )
  59. {
  60. List L,q;
  61. L = (List)malloc(sizeof(struct Node));
  62. L->Next = NULL;
  63. q = L;
  64. List p1, p2;
  65. p1 = L1->Next;
  66. p2 = L2->Next;
  67. while(p1 && p2)
  68. {
  69. if(p1->Data >= p2->Data)
  70. {
  71. q->Next = p2;
  72. q = p2;
  73. p2 = p2->Next;
  74. }
  75. else if(p1->Data <= p2->Data)
  76. {
  77. q->Next = p1;
  78. q = p1;
  79. p1 = p1->Next;
  80. }
  81. }
  82. while(p1)
  83. {
  84. q->Next = p1;
  85. q = p1;
  86. p1 = p1->Next;
  87. }
  88. while(p2)
  89. {
  90. q->Next = p2;
  91. q = p2;
  92. p2 = p2->Next;
  93. }
  94. L1->Next = NULL;
  95. L2->Next = NULL;
  96. return L;
  97. }

发表评论

表情:
评论列表 (有 0 条评论,257人围观)

还没有评论,来说两句吧...

相关阅读