4.3 线性表之链表

目录

链表的存储结构

链表的结构

链表的相关运算


链表的存储结构

将线性表L=(a0,a1,……,an-1)中各元素分布在存储器的不同存储块,称为结点,通过地址或指针建立元素之间的联系  

结点的data域存放数据元素ai,而next域是一个指针,指向ai的直接后继ai+1所在的结点。

结点类型描述:      

typedef   struct  node       {

  data_t   data;   //结点的数据域//            

  struct node *next;  //结点的后继指针域//        

}listnode, *linklist;                

若说明

       listnode A;

       linklist p = &A;

设p指向链表中结点ai

获取ai,写作:p->data;

而取ai+1,写作:p->next->data

若指针p的值为NULL,则它不指向任何结点, 此时取p->data或p->next是错误的。  

可调用C语言中malloc()函数向系统申请结点的存储空间

           linklist  p;

           p = (linklist)malloc(sizeof(listnode));

则创建一个类型为linklist的结点,且该结点的地址已存入指针变量p中:

链表的结构

链表的相关运算

 链表查找  

1)按序号查找:实现GetLinklist(h, i)运算。 算法思路:从链表的a0起,判断是否为第i结点,若是则返回该结点的指针,否则查找下一结点,依次类推。

2)按值查找(定位) :  即实现Locate(h, x)。 算法思路:从链表结点a0起,依次判断某结点是否等于x,若是,则返回该结点的地址,若不是,则查找下一结点a1,依次类推。若表中不存在x,则返回NULL。

链表的插入:即实现InsertLinklist(h, x, i,)。将x插入表中结点ai之前的情况。 算法思路:调用算法GetLinklist(h, i-1),获取结点ai-1的指针p(ai 之前驱),然后申请一个q结点,存入x,并将其插入p指向的结点之后。

 链表的删除:即实现DeleteLinklist(h, i), 算法对应的链表结构如图所示。 算法思路:同插入法,先调用函数GetLinklist(h, i-1),找到结点ai的前驱,然后将结点ai删除之。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值