第四周项目3

来源:互联网 发布:ipad和mac共享屏幕 编辑:程序博客网 时间:2024/05/21 11:12
  1. /*     
  2. * Copyright(c) 2017,烟台大学计算机学院     
  3. * All rights reserved.     
  4. * 文件名称:cpp1.     
  5. * 作    者:刘思源     
  6. * 完成日期:2017 年 9 月 26 日     
  7. * 版 本 号:v1.0     
  8. *     
  9. * 问题描述:已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m、n,请设计算法将L2连接到L1的后面。 
  10. * 输入描述:无需输入     
  11. * 程序输出:将L2连接到L1后的链表 
  12. */       
[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3. #include "linklist.h"  
  4.   
  5. void Link(LinkList *&L1, LinkList *&L2)  
  6. {  
  7.     LinkList *p = L1;  
  8.     while(p->next != NULL)   //找到L1的尾节点  
  9.         p = p->next;  
  10.     p->next = L2->next;  //将L2的首个数据节点连接到L1的尾节点后  
  11.     free(L2);   //释放掉已经无用的L2的头节点  
  12. }  
  13.   
  14. int main()  
  15. {  
  16.     LinkList *A, *B;  
  17.     int i;  
  18.     ElemType a[]= {1,3,2,9};  
  19.     ElemType b[]= {0,4,7,6,5,8};  
  20.     InitList(A);  
  21.     for(i=3; i>=0; i--)  
  22.         ListInsert(A, 1, a[i]);  
  23.     InitList(B);  
  24.     for(i=5; i>=0; i--)  
  25.         ListInsert(B, 1, b[i]);  
  26.     Link(A, B);  
  27.     printf("A:");  
  28.     DispList(A);  
  29.     DestroyList(A);  
  30.     return 0;  
  31. }  
[cpp] view plain copy
  1. #ifndef LINKLIST_H_INCLUDED  
  2. #define LINKLIST_H_INCLUDED  
  3.   
  4. typedef int ElemType;  
  5. typedef struct  DList  
  6. {  
  7.     ElemType data;  
  8.     struct DList *next;  
  9. }LinkList;  
  10.   
  11. void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表  
  12. void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表  
  13. void DestroyList(LinkList *&L);//销毁单链表  
  14. void DispList(LinkList *L);//输出单链表  
  15. void InitList(LinkList *&L);//初始化单链表InitList(L)  
  16. void DestroyList(LinkList *&L);//销毁单链表DestroyList(L)  
  17. bool ListEmpty(LinkList *L);//判定是否为空表ListEmpty(L)  
  18. int ListLength(LinkList *L);//求单链表的长度ListLength(L)  
  19. bool GetElem(LinkList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)  
  20. int LocateElem(LinkList *L, ElemType e);//按元素值查找LocateElem(L,e)  
  21. bool ListInsert(LinkList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)  
  22. bool ListDelete(LinkList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)  
  23.   
  24. #endif // LINKLIST_H_INCLUDED  
[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3. #include "linklist.h"  
  4.   
  5. void CreateListF(LinkList *&L,ElemType a[],int n)  
  6. {  
  7.     LinkList *s;  
  8.     L=(LinkList *)malloc(sizeof(LinkList));  
  9.     L->next=NULL;  
  10.     for(int i=0;i<n;i++)  
  11.     {  
  12.         s=(LinkList *)malloc(sizeof(LinkList));  
  13.         s->data=a[i];  
  14.         s->next=L->next;//将结点s插入到原首结点之前,头结点之后  
  15.         L->next=s;  
  16.     }  
  17. }  
  18. void CreateListR(LinkList *&L,ElemType a[],int n)  
  19. {  
  20.     LinkList *s,*r;  
  21.     L=(LinkList *)malloc(sizeof(LinkList));  
  22.     r=L;//r始终指向尾结点,初始时指向头结点  
  23.     for(int i=0;i<n;i++)  
  24.     {  
  25.         s=(LinkList *)malloc(sizeof(LinkList));  
  26.         s->data=a[i];  
  27.         r->next=s;//将结点s插入到结点r之后  
  28.         r=s;  
  29.     }  
  30.     r->next=NULL;  
  31. }  
  32.   
  33. void DestroyList(LinkList *&L)  
  34. {  
  35.     LinkList *pre=L,*p=L->next;  
  36.     while(p!=NULL)  
  37.     {  
  38.         free(pre);  
  39.         pre=p;  
  40.         p=pre->next;  
  41.     }  
  42.     free(pre);  
  43. }  
  44.   
  45. void DispList(LinkList *L)  
  46. {  
  47.     LinkList *p=L->next;  
  48.     while(p!=NULL)  
  49.     {  
  50.         printf("%d ",p->data);  
  51.         p=p->next;  
  52.     }  
  53.     printf("\n");  
  54. }  
  55.   
  56. void InitList(LinkList *&L)  
  57. {  
  58.     L=(LinkList *)malloc(sizeof(LinkList));  
  59.     L->next=NULL;  
  60. }  
  61.   
  62. bool ListEmpty(LinkList *L)  
  63. {  
  64.     return(L->next==NULL);  
  65. }  
  66.   
  67. int ListLength(LinkList *L)  
  68. {  
  69.     int n=0;  
  70.     LinkList *p=L;  
  71.     while(p->next!=NULL)  
  72.     {  
  73.         n++;  
  74.         p=p->next;  
  75.     }  
  76.     return(n);  
  77. }  
  78.   
  79. bool GetElem(LinkList *L,int i,ElemType &e)  
  80. {  
  81.     int j=0;  
  82.     LinkList*p=L;  
  83.     if(i<=0)  
  84.         return false;  
  85.     while(j<i&&p!=NULL)  
  86.     {  
  87.         j++;  
  88.         p=p->next;  
  89.     }  
  90.     if (p==NULL)  
  91.         return false;  
  92.     else  
  93.     {  
  94.         e=p->data;  
  95.         return true;  
  96.     }  
  97. }  
  98.   
  99. //按元素值查找LocateElem(L,e)  
  100. int LocateElem(LinkList *L, ElemType e)  
  101. {  
  102.     int i=1;  
  103.     LinkList *p=L->next;  
  104.     while(p!=NULL&&p->data!=e)  
  105.     {  
  106.         p=p->next;  
  107.         i++;  
  108.     }  
  109.     if(p==NULL)  
  110.         return(0);  
  111.     else  
  112.         return (i);  
  113. }  
  114.   
  115. //插入数据元素ListInsert(L,i,e)  
  116. bool ListInsert(LinkList *&L,int i,ElemType e)  
  117. {  
  118.     int j;  
  119.     LinkList *p=L,*s;  
  120.     if(i<=0)  
  121.         return false;   //参数错误时返回false  
  122.     while(j<i-1&&p!=NULL)  
  123.     {  
  124.         j++;  
  125.         p=p->next;  
  126.     }  
  127.     if(p==NULL)  
  128.         return false;  
  129.     else  
  130.     {  
  131.         s=(LinkList * )malloc(sizeof(LinkList));  
  132.         s->data=e;  
  133.         s->next=p->next;  
  134.         p->next=s;  
  135.         return true;//成功插入返回true  
  136.     }  
  137. }  
  138.   
  139. //删除数据元素ListDelete(L,i,e)  
  140. bool ListDelete(LinkList *&L,int i,ElemType &e)  
  141. {  
  142.     int j=0;  
  143.     LinkList*p=L,*q;  
  144.     if(i<=0)  
  145.         return false;   //参数错误时返回false  
  146.     while(j<i-1&&p!=NULL)  
  147.     {  
  148.         j++;  
  149.         p=p->next;  
  150.     }  
  151.     if(p==NULL)  
  152.         return false;  
  153.     else  
  154.     {  
  155.         q=p->next;  
  156.         if(q==NULL)  
  157.             return false;  
  158.         e=q->data;  
  159.         p->next=q->next;  
  160.         free(q);  
  161.         return true;  
  162.     }  
  163. }  
原创粉丝点击