第四周项目2建立算法库

  1. /*   
  2. * Copyright(c) 2017,烟台大学计算机学院   
  3. * All rights reserved.   
  4. * 文件名称:cpp1.   
  5. * 作    者:刘思源   
  6. * 完成日期:2017 年 9 月 26 日   
  7. * 版 本 号:v1.0   
  8. *   
  9. * 问题描述:建立单链表的算法库。  
  10.   算法库包括两个文件:  
  11.   头文件:linklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;  
  12.   源文件:linklist.cpp,包含实现各种算法的函数的定义请采用程序的多文件组织形式。  
  13.   建立如上的两个文件,另外再建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。  
  14. * 输入描述:无需输入   
  15. * 程序输出:建立的链表  
  16. */      

[cpp]  view plain  copy
  1. #include "linklist.h"    
  2. int main()    
  3. {    
  4.     LinkList *L;    
  5.     InitList(L);    
  6.     ListInsert(L,1,15);    
  7.     ListInsert(L,1,10);    
  8.     ListInsert(L,1,5);    
  9.     ListInsert(L,1,20);    
  10.     DispList(L);    
  11.     DestroyList(L);    
  12.     return 0;    
  13. }    
[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. }    
[cpp]  view plain  copy
  1. #ifndef LINKLIST_H_INCLUDED  
  2. #define LINKLIST_H_INCLUDED  
  3.   
  4. typedef int ElemType;  
  5. typedef struct LNode        //定义单链表结点类型  
  6. {  
  7.     ElemType data;  
  8.     struct LNode *next;     //指向后继结点  
  9. }LinkList;  
  10. void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表  
  11. void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表  
  12. void InitList(LinkList *&L);  //初始化线性表  
  13. void DestroyList(LinkList *&L);  //销毁线性表  
  14. bool ListEmpty(LinkList *L);  //判断线性表是否为空  
  15. int ListLength(LinkList *L);  //求线性表长度  
  16. void DispList(LinkList *L);  //输出线性表  
  17. bool GetElem(LinkList *L,int i,ElemType &e);  //求线性表某个数据元素值  
  18. int LocateElem(LinkList *L,ElemType e);  //按元素值查找  
  19. bool ListInsert(LinkList *&L,int i,ElemType e);  //插入数据元素  
  20. bool ListDelete(LinkList *&L,int i,ElemType &e);  //删除数据元素  
  21.   
  22. #endif // LINKLIST_H_INCLUDED 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值