概述
链式存储:又称非顺序映像或链式映像,即一组物理位置任意的存储单元来存放线性表的数据元素。这组存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置;因而即逻辑次序和物理次序不一定相同(但也有可能相同!)
为了实现线性表的功能,设计了如下存储方式,一个结点分为数据域和指针域:
存储的地址称为指针/链;最后一个元素指针域设置为空(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)。
注意:以上算法实现的代码部分很多都是伪代码,即大多只提供参考思路,而不是可执行代码!
参考网课:数据结构与算法基础(青岛大学-王卓)
最后
以上就是欣慰小丸子为你收集整理的数据结构与算法(三):线性表的链式表示与实现之单链表的全部内容,希望文章能够帮你解决数据结构与算法(三):线性表的链式表示与实现之单链表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复