线性表的链式存储结构(1)--单向链表

  • 单向链表类C描述

typedef struct node{

    datatype data;//数值域

    struct node *next;//指针域

}node,*linklist;//节点类型,指针类型

  • 链表基本算法

1.单向链表定位

node *locate(node *head,int i)//head是带头结点的单向链表的头指针,该算法定位于链表中的第i个结点

{

    node *p=head;//指针初始化,p指向头结点

    int j=0;//j为计数器,初值为零

    while((p!=NULL)&&(j<i))

    {

        p=p->next;//p后移,p移至第i个结点为止

        j++;//j计数

    }

    return(p);//p指向第i个结点(返回第i个结点的地址)

}

2.单向链表插入

void insert(linklist head,int i,datatype x)

{//head是带头结点的单链表的头指针

//该算法在第i个结点后面插入其数值为x的新结点

    node *p=locate(head,i-1);//令p指向第i-1个结点

    if(p!=NULL)

    {

        node *q=(linklist)malloc(sizeof(node));

        q->data=x;//生成新结点,其数值为x

        q->next=p->data;

        p->next=q;//完成插入

    }

}

3.单向链表删除

void delete(node* head,int i,datatype e)

{//head是带头结点的单链表的头指针

    node *p=head;//初始化指针

    int j=0;//j为计数器

    while(p->next!=NULL&&j<i-1)

    {

        p=p->next;j++;//寻找第i-1个结点

    }

    if(p->next!=NULL&&j==i-1)

    {

        node *q=p->next;//q指向p的下一个结点(即第i个结点)

        p->next=q->next;//删除第i个结点

        e=q->data;//保留第i个结点的值

        free(q);//释放q

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值