数据结构与算法(三):线性表的链式表示与实现之单链表

链式存储:又称非顺序映像或链式映像,即一组物理位置任意的存储单元来存放线性表的数据元素。这组存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置;因而即逻辑次序和物理次序不一定相同(但也有可能相同!)

为了实现线性表的功能,设计了如下存储方式,一个结点分为数据域和指针域

 

存储的地址称为指针/链最后一个元素指针域设置为空(NULL);

为了寻找第一个元素,故设计头指针H存储第一个元素的地址;单链表由头指针唯一确定,所以单链表可以头指针的名字来命名

链表基本概念介绍:

 

 

 

 如何表示空表:头指针/头结点的指针域为空NULL;

设置头结点的好处:便于首元结点的处理;便于空表和非空表的处理;

头结点的数据域存储什么:由自己设计,可以空着不存,也可以自己设计如存储链表长度(链表的长度不含头结点);

链式存储的特点:结点在存储器中的位置是任意的/采取顺序存取法,即寻找第一个结点和最后一个结点所花费的时间是不同的,必须从前到后一个一个去找(顺序表采取的是随机存取)。

单链表的存储结构:利用结构体来定义,指针和数据类型必须是一样的,故需要嵌套定义:

Lnode a即定义一个结点为a,a.data/a.next分别为a的数据域部分和a的指针域部分;

Linklist L等价于Lnode *L ,意思为指向Lnode这种结构体类型的指针。

举例:

单链表各种操作的实现

基本操作:

需要掌握的算法操作汇总:

 

1.单链表的初始化:(new是C++)

 2.判断链表是否为空:

 3.单链表的销毁,链表销毁后不再存在,注意循环结束条件:

 

 4.清空单链表,链表依然存在,只不过还是空的,头结点头指针还在:

 

 5.求链表表长:

 6.取值:取单链表的第i个元素:

 

 7.查找,按值查找,分别返回地址或顺序位置,思路类似于取值:

 

 8.插入:在第i个结点前插入一个值为e的新结点:

 

9.删除:删除第i个结点:

 注:时间复杂度小结:

 10.头插法(前插法)建立单链表:头指针,倒位序

 易知头插法的时间复杂度为O(n)。

11.尾插法(后插法)建立单链表:尾指针,正位序

 易知尾插法的时间复杂度为O(n)。

注意:以上算法实现的代码部分很多都是伪代码,即大多只提供参考思路,而不是可执行代码!

参考网课:数据结构与算法基础(青岛大学-王卓)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值