第四周项目3

xiaoxiao2021-02-28  22

/*      * Copyright(c) 2017,烟台大学计算机学院      * All rights reserved.      * 文件名称:cpp1.      * 作    者:刘思源      * 完成日期:2017 年 9 月 26 日      * 版 本 号:v1.0      *      * 问题描述:已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m、n,请设计算法将L2连接到L1的后面。  * 输入描述:无需输入      * 程序输出:将L2连接到L1后的链表  */        [cpp]  view plain  copy #include <stdio.h>   #include <malloc.h>   #include "linklist.h"      void Link(LinkList *&L1, LinkList *&L2)   {       LinkList *p = L1;       while(p->next != NULL)   //找到L1的尾节点           p = p->next;       p->next = L2->next;  //将L2的首个数据节点连接到L1的尾节点后       free(L2);   //释放掉已经无用的L2的头节点   }      int main()   {       LinkList *A, *B;       int i;       ElemType a[]= {1,3,2,9};       ElemType b[]= {0,4,7,6,5,8};       InitList(A);       for(i=3; i>=0; i--)           ListInsert(A, 1, a[i]);       InitList(B);       for(i=5; i>=0; i--)           ListInsert(B, 1, b[i]);       Link(A, B);       printf("A:");       DispList(A);       DestroyList(A);       return 0;   }   [cpp]  view plain  copy #ifndef LINKLIST_H_INCLUDED   #define LINKLIST_H_INCLUDED      typedef int ElemType;   typedef struct  DList   {       ElemType data;       struct DList *next;   }LinkList;      void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表   void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表   void DestroyList(LinkList *&L);//销毁单链表   void DispList(LinkList *L);//输出单链表   void InitList(LinkList *&L);//初始化单链表InitList(L)   void DestroyList(LinkList *&L);//销毁单链表DestroyList(L)   bool ListEmpty(LinkList *L);//判定是否为空表ListEmpty(L)   int ListLength(LinkList *L);//求单链表的长度ListLength(L)   bool GetElem(LinkList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)   int LocateElem(LinkList *L, ElemType e);//按元素值查找LocateElem(L,e)   bool ListInsert(LinkList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)   bool ListDelete(LinkList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)      #endif // LINKLIST_H_INCLUDED   [cpp]  view plain  copy #include <stdio.h>   #include <malloc.h>   #include "linklist.h"      void CreateListF(LinkList *&L,ElemType a[],int n)   {       LinkList *s;       L=(LinkList *)malloc(sizeof(LinkList));       L->next=NULL;       for(int i=0;i<n;i++)       {           s=(LinkList *)malloc(sizeof(LinkList));           s->data=a[i];           s->next=L->next;//将结点s插入到原首结点之前,头结点之后           L->next=s;       }   }   void CreateListR(LinkList *&L,ElemType a[],int n)   {       LinkList *s,*r;       L=(LinkList *)malloc(sizeof(LinkList));       r=L;//r始终指向尾结点,初始时指向头结点       for(int i=0;i<n;i++)       {           s=(LinkList *)malloc(sizeof(LinkList));           s->data=a[i];           r->next=s;//将结点s插入到结点r之后           r=s;       }       r->next=NULL;   }      void DestroyList(LinkList *&L)   {       LinkList *pre=L,*p=L->next;       while(p!=NULL)       {           free(pre);           pre=p;           p=pre->next;       }       free(pre);   }      void DispList(LinkList *L)   {       LinkList *p=L->next;       while(p!=NULL)       {           printf("%d ",p->data);           p=p->next;       }       printf("\n");   }      void InitList(LinkList *&L)   {       L=(LinkList *)malloc(sizeof(LinkList));       L->next=NULL;   }      bool ListEmpty(LinkList *L)   {       return(L->next==NULL);   }      int ListLength(LinkList *L)   {       int n=0;       LinkList *p=L;       while(p->next!=NULL)       {           n++;           p=p->next;       }       return(n);   }      bool GetElem(LinkList *L,int i,ElemType &e)   {       int j=0;       LinkList*p=L;       if(i<=0)           return false;       while(j<i&&p!=NULL)       {           j++;           p=p->next;       }       if (p==NULL)           return false;       else       {           e=p->data;           return true;       }   }      //按元素值查找LocateElem(L,e)   int LocateElem(LinkList *L, ElemType e)   {       int i=1;       LinkList *p=L->next;       while(p!=NULL&&p->data!=e)       {           p=p->next;           i++;       }       if(p==NULL)           return(0);       else           return (i);   }      //插入数据元素ListInsert(L,i,e)   bool ListInsert(LinkList *&L,int i,ElemType e)   {       int j;       LinkList *p=L,*s;       if(i<=0)           return false;   //参数错误时返回false       while(j<i-1&&p!=NULL)       {           j++;           p=p->next;       }       if(p==NULL)           return false;       else       {           s=(LinkList * )malloc(sizeof(LinkList));           s->data=e;           s->next=p->next;           p->next=s;           return true;//成功插入返回true       }   }      //删除数据元素ListDelete(L,i,e)   bool ListDelete(LinkList *&L,int i,ElemType &e)   {       int j=0;       LinkList*p=L,*q;       if(i<=0)           return false;   //参数错误时返回false       while(j<i-1&&p!=NULL)       {           j++;           p=p->next;       }       if(p==NULL)           return false;       else       {           q=p->next;           if(q==NULL)               return false;           e=q->data;           p->next=q->next;           free(q);           return true;       }   }  
转载请注明原文地址: https://www.6miu.com/read-200357.html

最新回复(0)