第四周项目(2)-建立链表的算法库

来源:互联网 发布:网络包年维护服务 编辑:程序博客网 时间:2024/06/07 07:23

/* *Copyright(c) 2017,YTU CS *All right reserved. *作    者:王铭泽. *完成日期:2017,9,21 *版 本 号: v1.0 * *问题描述:  算法库包括两个文件:   头文件:linklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;   源文件:linklist.cpp,包含实现各种算法的函数的定义  *输    入: 无 *输    出: 两个不同方式建立的链表。 */  


本文章是上一篇文章的续,再次文章中添加了六个函数算法分别是:1.判断链表是否为空。2.求链表长度。3.求链表中某个数据的元素值。4.按元素查找。5.插入元素。6.删除元素。

附上代码:

//判断是否为空表bool ListEmpty(LinkList *L){   return (L->next==NULL);}//求链表长度int ListLength(LinkList *L){    int i=0;    LinkList *p;    p=L;    while(!p->next==NULL)    {        i++;        p=p->next;    }    return i;}//求线性表中某元素的值bool GetElem(LinkList *L,int i,Elemtype &e){    LinkList *r=L;    int j=0;                //记录数据的个数。    if(i<0) return false;//容错判断    //开始查找第i个元素。    while(j<i && r!=NULL)    {        j++;        r=r->next;//指向的是j的后一个元素。    }    if(r==NULL)       return false;     else       {           e=r->data;          return true;       }}//按元素查找位置int LocateElem(LinkList *L,Elemtype e){    LinkList *r=L->next;    int j=1;    //观察&&不同对结果的影响。测试后感觉没有影响!?    //计算顺序是如果&&前的条件成立则不进行下一步的计算。    while(r->next !=NULL && r->data!=e)    {        r=r->next;        j++;    }    if(r->next==NULL)    {        return 0;    }    else    {        return j;    }}//插入元素bool ListInsert(LinkList *&L,int i,Elemtype e){    int j=0;    LinkList *r=L,*s;    i--;    if(i<0) return false;    //完成r指向第i-1个元素。    while(j<i && r!=NULL)    {        j++;        r=r->next;    }    if(r==NULL)        return false;    else    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=e;        s->next=r->next;        r->next=s;        return true;    }}//删除元素bool ListDelete(LinkList *&L,int i,Elemtype &e){    LinkList *r=L,*s;    int j=0;    if(i<0) return false;    i--;    while( j<i && r!=NULL )    {        j++;        r=r->next;    }    if(r==NULL)     return false;     else     {         s=r->next;         //注意判断当恰好取到最后一个元素的时候。         if(s->next==NULL)            return false;         e=s->data;         r->next=s->next;         free(s);         return true;     }}
以上这些函数与之前的函数形成了比较完整的链表算法库,供以后进行链表基本运算使用和借鉴。