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

本文介绍了链表的基本操作,包括判断链表是否为空、求链表长度、获取链表元素值、按元素查找、插入及删除元素等六个实用函数,并提供了详细的C语言实现代码。

/* 
*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;
     }
}
以上这些函数与之前的函数形成了比较完整的链表算法库,供以后进行链表基本运算使用和借鉴。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值