【数据结构】链表的八种形态

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境:Visual Studio 2022


目录

链表的三大"性状"

一.带头链表和不带头链表

头指针与头结点的异同

    头指针

    头结点

二.循环链表和非循环链表

三.双向链表和单向链表

链表的八大形态

结语


链表的三大"性状"

要搞清楚为什么链表八大形态,就要先搞清楚链表的三大"性状".

说起"性状"这个词,大家是不是首先都会想到孟德尔的豌豆杂交实验:

你可能会疑惑,难道链表也像豌豆一样有相对性状吗?

我要告诉你,是的.而且链表的相对性状也和豌豆的相对性状一样可以"杂交".


在"杂交"出链表的八大形态之前,我们先来了解链表的三种相对性状:

一.带头链表和不带头链表

有时,我们为了更加方便地对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头结点.

头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息,头结点的指针域存储指向第一个结点的指针,如下图所示:


头指针与头结点的异同

    头指针

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

 无头结点单链表示意图:

 无头结点空单链表示意图:

头结点

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

带头结点单链表示意图:

带头结点空单链表示意图:


二.循环链表和非循环链表

对于单链表,由于每个结点只存储了向后的指针,到了尾标志就停止了向后链的操作,这样,当中某一结点就无法找到它的前驱结点了.

举个例子,下面是北京的地铁线路图:

我们拿一号线举个例子,假设我想乘坐地铁一号线从双桥地铁站到天安门东地铁站去,那么我在双桥站登上地铁后,坐上一号线朝向苹果园的地铁就出发了.

但是因为我在地铁上玩着手机忽略了时间,等想起来才发现自己乘坐的这趟地铁已经行驶到复兴门了,那么我还能继续乘坐这趟地铁到达天安门东吗?显然是不能的.

其实这里一号线驶向苹果园的一趟地铁就有些类似于我们的单链表的结构,每个结点只能向后走,错过了就不能再回去.

但事实上,如果我们将地铁的尾站和首站连接起来,就能解决我们前面所面临的困难,如地铁10号线:

我们可以看到,地铁10号线的设计就是将整条地铁线路首尾相连,这样一趟地铁就可以在线路上一直循环,即使我乘坐10号线时错过了国贸站,但只要我有足够的恒心和毅力,等这班地铁再绕完一整圈的历程我就又可以回到国贸站.

这种将单链表中终端结点的指针端空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list).

循环链表解决了一个很麻烦的问题:如何从当中一个结点出发,访问到链表的全部结点.

循环链表带有头结点的空链表示意图:

循环链表带有头结点的非空链表示意图:

循环链表和单链表的主要差异就在于循环遍历时的判断条件上,原来是判断p->next是否为NULL,现在则是p->next不等于头结点,则循环遍历未结束.


三.双向链表和单向链表

我们在单链表中,有了next指针,我们要查找下一个结点的时间复杂度为O(1).

可是如果我们要查找的是上一个结点的话,那最坏的时间复杂度就是O(n)了,因为我们每次都要从头开始遍历查找结点.

为了克服单向性这一缺点,我们的前辈们设计出了双向链表.

双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域.

所以在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱.

双向链表结点结构示意图:

双向循环带有头结点的空链表示意图:

双向循环带有头结点的非空链表示意图:

对于双向链表中的某一个结点p,它后继的前驱还是它自己,即:

p->next->prev=p=p->prev->next

链表的八大形态

通过上面对链表性状的了解,我们知道了链表共有三种性状,如下:

  • 有头结点/无头结点
  • 非循环链表/循环链表
  • 单向链表/双向链表

将链表的三种性状简单排列组合后我们就可以得到链表的八种形态了,分别是:

  • 无头结点非循环单向链表
  • 无头结点非循环双向链表
  • 无头结点循环单向链表
  • 无头结点循环双向链表
  • 有头结点非循环单向链表
  • 有头结点非循环双向链表
  • 有头结点循环单向链表
  • 有头结点循环双向链表

在以上8种链表的形态中我们最常用的无头结点非循环单向链表有头结点循环双向链表这两种链表结构,这两种链表的特性为:

  • 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。并且这种结构在笔试面试中出现很多。
  • 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。

因为这两种链表真的非常重要,所以我们必须对这两种链表的实现要十分熟悉,有关这两种链表的C语言实现详解我放在下面了,感兴趣的朋友可以直接点击链接跳转到相应文章参阅:

【数据结构】C语言实现单链表万字详解(附完整运行代码)icon-default.png?t=N7T8https://blog.csdn.net/weixin_72357342/article/details/133971550?spm=1001.2014.3001.5502

【数据结构】C语言实现带头双向循环链表详解(附完整运行代码)icon-default.png?t=N7T8https://blog.csdn.net/weixin_72357342/article/details/134513792


结语

希望通过上面的内容能对大家有所帮助,欢迎大佬们留言或私信与我交流.学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!

相关文章推荐

【数据结构】什么是数据结构?

【数据结构】什么是算法?

【数据结构】什么是线性表?

【数据结构】线性表的顺序存储结构

【数据结构】线性表的链式存储结构

【数据结构】C语言实现顺序表万字详解(附完整运行代码)

【数据结构】10道经典面试题目带你玩转链表

【实用编程技巧】不想改bug?初学者必须学会使用的报错函数assert!(断言函数详解)



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/201155.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编-指针

一个变量如果包含的是另一个变量的地址, 则该变量就称为指针(pointer) 。指针是操作数组和数据结构的极好工具,因为它包含的地址在运行时是可以修改的。 .data arrayB byte 10h, 20h, 30h, 40h ptrB dword arrayB ptrB1 dword OFFSET arrayBarray…

5 个适用于 Linux 的开源日志监控和管理工具

当Linux等操作系统运行时,会发生许多事件和在后台运行的进程,以实现系统资源的高效可靠的使用。这些事件可能发生在系统软件中,例如 init 或 systemd 进程或用户应用程序,例如 Apache、MySQL、FTP 等。 为了了解系统和不同应用程序…

AIOps探索 | 应急处置中排障的降本增效方法探索(上)

文章来源:公众号ID-布博士(擎创科技资深产品专家) 哈喽~友友们大家好,最近运维界也是蛮热闹的,前有语雀多次崩溃,后有阿里全系产品集体故障,不管是哪种,都足够逼疯一个运维工程师。…

Java修仙记之记录一次与前端女修士论道的经历

文章开始之前,想跟我念一句:福生无量天尊,无量寿佛,阿弥陀佛 第一场论道:id更新之争 一个天气明朗的下午,前端的小美女长发姐告诉我:嘿,小后端,你的代码报错了 我答道&am…

LeetCode算法心得——打家劫舍(记忆化搜索)

大家好,我是晴天学长,准备开始深入动态规划啦,先从记忆化搜索开始,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .打家劫舍 你是一个专业的小偷,计划偷窃…

神经网络常用激活函数详解

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

科技界年度大戏剧情终结:Open AI宣布ChatGPT创始人奥特曼回归

就在刚刚,在Sam Altman在X平台表示: 我喜欢 Openai,过去几天我所做的一切都是为了让这个团队及其使命保持一致。当我决定在周日晚上加入微软时,很明显这对我和团队来说是最好的道路。在新董事会和 w satya 的支持下,我…

1.Gin 介绍

1.Gin 介绍 介绍 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者,我们推荐你使用 Gin 框架。 Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单&a…

Linux:进度条(小程序)以及git三板斧

Linux小程序&#xff1a;进度条 在实现小程序前我们要弄清楚&#xff1a; 1.缓冲区&#xff1b; 2.回车与换行。 缓冲区&#xff1a; 分别用gcc来编译下面两个程序&#xff1a; 程序一&#xff1a; #include <stdio.h> int main() { printf("hello Makefil…

飞瓜数据B站丨B站UP主11月第3周榜单排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年11月13日-11月19日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营…

云备份——初步认识及环境搭建

文章目录 整体功能简介云备份功能实现目标服务器程序负责功能细分服务端模块划分客户端功能细分客户端模块划分 环境搭建gcc安装 jsoncppbundle库 与 httplib库安装 整体功能简介 云备份功能 自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中 并且能够通过浏…

基于Apache部署虚拟主机网站

文章目录 Apache释义Apache配置关闭防火墙和selinux 更改默认页内容更改默认页存放位置个人用户主页功能基于口令登录网站虚拟主机功能基于ip地址相同ip不同域名相同ip不同端口 学习本章完成目标 1.httpd服务程序的基本部署。 2.个人用户主页功能和口令加密认证方式的实现。 3.…

Spring框架学习 -- 核心思想

目录 (1) Spring是什么? (2) 什么是IOC容器? (3) 从传统开发认识spring (4) 这种传统开发的缺陷 (5)解决传统开发中的缺陷 (6) 对比总结规律 (7) 理解IOC 创作不易多多支持 (1) Spring是什么? 我们常说的Spring的全称是: Spring Framework(Spring框架), 它是一个开源…

【广州华锐互动】VR防溺水安全内容体验提高群众防溺水意识

在全球各地&#xff0c;溺水是导致儿童和青少年死亡的主要原因之一。据世界卫生组织的统计&#xff0c;全球每年有超过36万人因溺水而死亡&#xff0c;其中大部分是儿童和青少年。因此&#xff0c;提供有效的防溺水教育和培训至关重要。随着科技的发展&#xff0c;虚拟现实&…

CF 1894A 学习笔记 思维 题意理解分析

原题 A. Secret Sport time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standard output Lets consider a game in which two players, A and B, participate. This game is characterized by two positive integer…

MyBatis Generator 插件 详解自动生成代码

MyBatis Generator&#xff08;MBG&#xff09;是MyBatis和iBATIS的代码生成器。可以生成简单CRUD操作的XML配置文件、Mapper文件(DAO接口)、实体类。实际开发中能够有效减少程序员的工作量&#xff0c;甚至不用程序员手动写sql。 它将为所有版本的MyBatis以及版本2.2.0之后的i…

【Java基础】Java导Excel攻略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【JavaEE】操作系统与进程

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

京东小程序:无代码开发实现API集成,连接电商平台、CRM和客服系统

无需复杂API开发&#xff0c;京东小程序连接电商平台 京东小程序平台以其全开放的生态模式&#xff0c;让商家享有京东系APP流量福利、海量SKU和开放能力&#xff0c;提升用户体验&#xff0c;同时也带来了新商机。京东小程序的最大优势在于&#xff0c;商家无需进行复杂的API…