😀前言
单链表是数据结构中最基本的一种链表结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。单链表具有灵活性和动态性,可以根据需要插入、删除和查找元素,适用于各种场景和问题的解决。
在本篇文章中,我们将初步介绍单链表的基本概念和特点,包括节点的结构、逻辑关系的表示和链表的操作。通过学习单链表的原理和实现方式,我们可以为后续的数据结构学习打下坚实的基础。

🏠个人主页:尘觉主页

数据结构(八)——初识单链表

前提

用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的,甚至是零散的分布在内存的任意位置,链表中元素的逻辑次序与物理次序不一定相同)

img

那怎么表示数据元素之间的逻辑关系呢?

  • 在存储自己内容的同时也存储下一个元素的地址。

  • 存储数据元素的域称为数据域,存储直接后继位置的域称为指针域。

  • 指针域中存储的信息称作指针或链。这两部分信息组成ai的存储映象称为结点(Node)。

  • n个结点(ai(1≤i≤n)的存储映象链结成一个链表,即为线性表。

  • 把链表中第1个结点的存储位置叫头指针。

  • 最后一个元素意味着没有直接后继规定最后一个结点指针为空(通常用NULL或^表示)

  • 单链表由头指针唯一确定,因此单链表可用头指针名字来命名

解释

上面已经描述了一个链表的基本结构和工作方式。链表是一种常用的数据结构,用于表示数据元素之间的逻辑关系。

下面我将解释一下如何表示数据元素之间的逻辑关系以及链表的基本概念:

  1. 节点(Node)

    一个节点通常包含两个部分:数据域和指针域。数据域用于存储数据元素的值,而指针域则存储下一个节点的地址。

  2. 头指针(Head Pointer)

    头指针是一个特殊的指针,它指向链表的第一个节点。通过头指针,我们可以访问链表中的所有节点。

  3. 空指针(NULL Pointer)

    最后一个节点的指针域将是空(NULL或^),表示它没有后续节点,即它是链表的尾部。

  4. 表示逻辑关系

    在链表中,数据元素之间的逻辑关系是通过节点之间的链接来表示的。即,一个节点中的指针域指向它的直接后继节点,从而建立了一种逻辑关系。

  5. 单链表

    你提到的这种结构通常称为单链表,因为每个节点只包含指向下一个节点的指针。还有双链表,在这种结构中,每个节点除了包含指向下一个节点的指针外,还包含一个指向前一个节点的指针。

单链表、双向链表、循环链表

单链表

结点只有一个指针域的链表称为单链表或线性链表

image-20230918114900941

双链表

结点有两个指针域的链表称为双链表

img

循环链表

首尾相接的链表叫循环链表

image-20230918115004496

为了更加方便对链表进行操作,会在单链表的第1个结点前附设一个头结点.头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息,头结点的指针域存储指向线性表第1个元素的结点。

image-20230918130316575

头指针:

指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针;
头指针具有标识作用,所以常用头指针冠以链表的名字;
无论链表是否为空,头指针均不为空。头指针是链表的必要元素

头结点:

头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)
有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了
头结点不一定是链表必须要素

首元结点:是指链表中存储第一个数据元素a1的结点

表示空表

image-20230918130444229

有头结点有什么好处?

①有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了

②便于空表和非空表的统一处理

当链表不设头结点时,假设L为单链表的头指针,它应该指向首元结点,则当单链表为长度n为0的空表时,L指针为空(判定空表的条件可记为:L==NULL)。

增加头结点后,无论链表是否为空,头指针都是指向头结点的非空指针。

头指针指向头结点。若为空表,则头结点的指针域为空(判定空表的条件可记为:L ->next== NULL)

顺序表每个元素的存储位置都可从线性表的起始位置计算得到。

而在单链表中,各个元素的存储位置都是随意的。

取得第i个数据元素必须从头指针出发顺链进行寻找,也称为顺序存取的存取结构。之前说的顺序表是随机存取而链表是顺序存储

单链表是由若干个结点构成,所以先定义一下结点。每一个结点都是有两部分组成,一部分是数据元素本身(数据域data)其数据类型根据实际问题的需要确定。另一部分是指向下一个元素(结点)的指针(指针域next)存放下一个元素的地址,结点可以用C语言中的结构体实现当中包含两个成员。

image-20230918131145145

image-20230918131201596

一个元素的地址,结点可以用C语言中的结构体实现当中包含两个成员。

image-20230918131211634

😄总结

本文介绍了单链表作为一种基本的链表结构,在数据结构中的重要性和应用。我们了解了单链表节点的组成和节点之间逻辑关系的表示方式,以及头指针和头结点的概念。

通过学习单链表,我们可以实现各种常见的链表操作,如插入、删除和查找元素。同时,我们也了解到单链表的一些优点和缺点,这有助于我们在实际应用中选择适合的数据结构。

掌握单链表的基本概念和操作是学习和理解更复杂的数据结构的基础。在接下来的学习中,我们将进一步深入探讨链表相关的知识,并学习更多高级的数据结构和算法。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐