10_5.cpp
资源名称:c.rar [点击查看]
上传用户:puke2000
上传日期:2022-07-25
资源大小:912k
文件大小:2k
源码类别:

C#编程

开发平台:

Visual C++

  1. //10_5
  2. #include <iostream.h>
  3. struct Lnode
  4. {
  5.   double data;
  6.   Lnode* next;
  7. };
  8. void ShowList(const Lnode* const head);
  9. void DeleteList(Lnode* head);
  10. void AddToEnd(Lnode* pnew, Lnode*& head);
  11. Lnode* GetNode();
  12. Lnode* Merge(Lnode* h1, Lnode* h2);
  13. void Insert(Lnode*& head, Lnode* p);
  14. void main()
  15. {
  16.   Lnode* head1=NULL;
  17.   Lnode* temp;
  18.   double d;
  19.   cout <<"data? ";
  20.   cin >>d;
  21.   while(d>0&&(temp=GetNode())){
  22.     temp->data=d;
  23.     AddToEnd(temp, head1);
  24.     cout <<"data? ";
  25.     cin >>d;
  26.   }
  27.   ShowList(head1);
  28.   Lnode* head2=NULL;
  29.   cout <<"data? ";
  30.   cin >>d;
  31.   while(d>0&&(temp=GetNode())){
  32.     temp->data=d;
  33.     AddToEnd(temp, head2);
  34.     cout <<"data? ";
  35.     cin >>d;
  36.   }
  37.   ShowList(head2);
  38.   Lnode* head = Merge(head1,head2);
  39.   ShowList(head);
  40.   DeleteList(head);
  41. }
  42. void ShowList(const Lnode* const head)
  43. {
  44.   for(Lnode* p=(Lnode*)head; p; p=p->next)
  45.     cout <<p->data <<"  ";
  46.   cout <<endl;
  47. }
  48. void DeleteList(Lnode* head)
  49. {
  50.   for(Lnode* p=head; p; ){
  51.     Lnode* t=p;
  52.     p=p->next;
  53.     delete t;
  54.   }
  55. }
  56. Lnode* Merge(Lnode* h1, Lnode* h2)
  57. {
  58.   Lnode* newHead = h1;
  59.   for(Lnode* p=h2; p; ){
  60.     Lnode* t=p;
  61.     p=p->next;
  62.     Insert(newHead,t);
  63.   }
  64.   return newHead;
  65. }
  66. void Insert(Lnode*& head, Lnode* p)
  67. {
  68.   if(!head){
  69.     head = p;
  70.     p->next = NULL;
  71.     return;
  72.   }
  73.   if(head->data > p->data){
  74.     p->next = head;
  75.     head =p;
  76.     return;
  77.   }
  78.   Lnode* sp;
  79.   for(sp=head; sp->next&& sp->next->data < p->data; sp=sp->next);
  80.   p->next = sp->next;
  81.   sp->next = p;
  82. }
  83. void AddToEnd(Lnode* pnew, Lnode*& head)
  84. {
  85.   if(!head)
  86.     head=pnew;
  87.   else{
  88.     Lnode* p;
  89.     for(p=head; p->next; p=p->next);
  90.     p->next = pnew;
  91.   }
  92.   pnew->next=NULL;
  93. }
  94. Lnode* GetNode()
  95. {
  96.   Lnode* item = new Lnode;
  97.   if(item){
  98.     item->next=NULL;
  99.     item->data=0.0;
  100.   }else
  101.     cout <<"Nothing allocatedn";
  102.   return item;
  103. }