我是靠谱客的博主 欣慰小丸子,最近开发中收集的这篇文章主要介绍数据结构与算法(三):线性表的链式表示与实现之单链表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

 

存储的地址称为指针/链最后一个元素指针域设置为空(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)。

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

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

最后

以上就是欣慰小丸子为你收集整理的数据结构与算法(三):线性表的链式表示与实现之单链表的全部内容,希望文章能够帮你解决数据结构与算法(三):线性表的链式表示与实现之单链表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部