数据结构—链表的基本操作

一、单链表的初始化

算法思想:创建一个新结点,用L指向这个结点作为头结点,再将头结点的指针域置为空。

Status InitList_L( LinkList &L)
{
    L = (LinkList) malloc (sizeof(Lnode)); //开辟一个新结点
    L -> next = NULL;
    return OK;
}

这里用到了malloc函数,是关于C语言动态内存分配这块儿的,有兴趣可以看之前的文章:C语言——动态内存分配_慢慢~漫漫的博客-CSDN博客

二、判断链表是否为空

int LinkEmpty( LinkList L )
{
    if( L -> next )
        return 1;
    else
        return 0;
}

如果为空则返回1,否则返回0,这个还是比较简单的。

三、单链表的销毁

算法思想:建立一个指针p,使得p指向头结点L,让L向后移动,并将p释放,依次进行,知道L==NULL。

 

 算法实现:

Status DestoryList_L( LinkList &L)
{
    Londe *p;
    while(L)
    {
        p = L;
        L = L -> next;
        free(p);
    }
}

四、单链表的清空

算法思想:建立两个指针p,q;让p指向第一个节点,也就是头结点L的后继节点,然让q指向p的后继节点,并且释放掉p;循环重复此操作,直到p指向NULL。

 

 

 算法实现:

Status ClearList_L( LinkList L )
{
    Lnode *p,*q;
    p = L -> next;
    while(p)
    {
        q = p -> next;
        free(p);
        p = q;
    }
}

五、求链表的表长

算法思想:开设一个指针p,从头结点的后继节点开始,向后移动,同时计数器i不断增加,直到p为NULL,跳出循环,返回i。

int LinstLength_L( LinkList L )
{
    Lnode *p;
    int i = 0;
    p = L -> next;  //头结点是不计入长度的,所以要从头结点的后继节点算起
    while(p)
    {
        i++;
        p = p -> next; 
    }
    return i;
}

六、取单链表当中的第i个元素

算法实现:在链表L中取第i个元素,把它的数据域放入e中并返回(两个逗号,三个参数;两逗三参)。

Status GetElem_L( LinkList L , int i , ElemType e)
{
    Lnode *p;
    p = L -> next;
    int j =1;
    while(p && j < i)
    {
        p = p -> next;
        ++j;
    }

    if( (!p) && (j > i) )
        return ERROR;   
    else
        e = p -> data;
    return Ok;
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值