最新要闻
- 两批次食品不符合国家标准上黑榜 全球快资讯
- 俩石柱子被五菱一下子撞飞 附近店家感慨:此乃神车
- 米哈游去年赚了161亿!网友:够再开发十个《原神》了
- 每日快报!时代变了!未来18个月内 传奇瑞等大量国产车企将进入英国市场
- 世界速讯:越南因罕见高温遭遇“停电危机”:佳能等企业轮流停电
- 全球视讯!多种口味:和路雪经典大梦龙多口味雪糕16支88元发车
- 甘肃省加快推进交通项目建设 每日快播
- 《暗黑4》第一件“军帽”在韩服现身 官方证实:最强欧皇诞生 属性无敌
- 苹果回应Mac Pro弃用AMD显卡:压根就不适配_天天微速讯
- VIP体验卡到期!高考后饭菜的反差让人猝不及防:从“吃啥有啥”变“有啥吃啥”
- 今日报丨windows图片查看器修复(windows图片查看器)
- 国家助学贷款累计发放超4000亿元 惠及2000多万名学生
- 曝苹果开发Vision Pro更便宜版本:屏幕、处理器会缩水|世界看热讯
- A卡降价太狠 NVIDIA坐不住:RTX 4060将提前上市 2399买吗?|焦点
- 汽车人险胜蜘蛛侠
- 产销两旺 新能源车消费涌热潮
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
焦点信息:5分钟学会数据结构中的线性链表
前言
除了一些算法之外,我们还要掌握一些常见的数据结构,比如数组、链表、栈、队列、树等结构。在之前的文章中,已经带着大家学习了Java里的一维数组和多维数组,所以对此我就不再细述了。接下来我会给大家讲解一下线性结构中的链表,希望你能喜欢哦。
全文大约【3200】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考...
(资料图片)
一. 链表简介
1. 概念
线性表可以说是一种最基础最简单的数据结构,它表示的是一种线性结构,比较常见的线性结构包括数组和链表等。
所谓的链表,顾名思义,就是链式的线性表,即链表也是一种线性表。与数组不同的是,链表采用的是链式存储,这种链式结构是非连续、非顺序的内存空间。链表中的每一个独立的元素被称为结点,故链表由一系列的结点组成。
其中链式存储的含义如下:
假如我们需要存放一堆物品,但没有足够大的空间将所有的物品一次性放下,此时该如何既放下所有的物品,又能简单的找到所有的物品位置呢?我们可以尝试采用如下解决方案:存放物品时,每放置一件物品就在该物品上贴一个小纸条,标明下一件物品放在哪里。这样,我们只需要记住第一件物品的位置,从第一件物品上的小纸条,就可以找到第二件物品,再根据第二件物品纸条的内容就找到第三件物品。按照这个方法依次类推,我们便可以找到所有的物品,这就是所谓的链式存储。
2. 表示方式
链表中的每个结点都由两部分组成:数据域、指针域。数据域用来存放当前结点需要存储的数据内容,指针域用于存放当前结点的下一个结点的地址。如下图所示:
图1-链表的结构示意图
上图所示的节点细节如下:
首个结点中next1存放的是第二结点的内存地址,因此用一个箭头指向第二个结点,就可以表示两个结点之间的关系。
最后一个结点的后面不再有其他结点,因此最后结点的next5指针域中没有地址内容,编程中可以用null表示。
3. 特点
通过上文所述,就可以给大家总结出链表的主要特点:
(1). 从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构;
(2). 链表由一系列结点组成,每个结点包括两个部分,一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表中数据元素的逻辑顺序就是通过地址指针实现的;
(3). 链表和数组相比,内存空间消耗更大,因为每个存储数据的结点都需要额外的空间存储地址指针。
二. 链表分类
在工作实践中,开发者接触到的链表主要有三种:单向链表、双向链表、循环链表。下面给大家逐一进行介绍一下。
1. 单向链表
单向链表的每一个结点包含两部分,一部分是存放数据的变量data,另一部分是指向下一个结点的指针next。单链表只能单向读取,其结构如下所示:
图2-单向链表结构示意图
们以Java为例,给出单向链表的结构定义:
class Node{Object value; Node next;}
2. 双向链表
双向链表,表示链表结点由三部分组成:数据域、下一结点指针域、前一结点指针域。
在双向链表结构中,既可以从首个结点出发,根据下一结点指针域依次找到所有结点;同理,也可以从指定的某个结点,根据结点中的前一结点指针地址,向前依次得到前面的结点。具体地,双向链表的结构示意图如下所示:
图3-双向链表结构示意图
如上图所示:
第1个结点作为整个链表的首结点,该结点的prev1指针内容为null,表示没有前一个结点。
第5个结点作为整个链表的最后结点,next5指针内容为null,表示后续没有下一个结点。
除此之外,中间三个结点,next指针和prev指针分别指向下一个结点和前一个结点,可以实现双向查找。
使用Java进行双向链表的结点结构定义如下:
class Node{ Object value; Node next; Node prev;}
3. 循环链表
如果,我们将链表的最后结点的next指针域做下修改,由原来的指向null修改为指向第1个结点,则整个链表就变成了一个环路。以单向链表进行操作,如下图所示:
图4-单向循环链表示意图
如上图,每个结点有数据域和指针域两个部分,这种循环链表被称之为单向循环链表。在计算机领域中,单向循环链表又称约瑟夫环(Josephu Loop),这一点仅做了解即可。当然,双向链表也可以调整为循环的链表,被称之为双向循环链表,如下图所示:
图5-双向循环链表示意图
三. 存储原理
数组在内存中的存储方式是顺序存储(连续存储),链表在内存中的存储方式则是随机存储,如下图所示:
图6-链表的内存存储示意图
链表的每一个结点分布在内存的不同位置,依靠next指针关联起来。这样可以灵活有效地利用零散的碎片空间。链表的第一个结点被称为头结点,没有任何结点的next指针指向它,它的前置结点为空null。头结点用来记录链表的基地址。有了它,就可以遍历得到整条链表的数据。链表的最后一个结点被称为尾结点,它的next指向为空null。
四. 链表常见操作
本篇文章内容,我们以单向链表为例,介绍链表的常见操作,主要包括:查找结点、更新结点、插入结点和删除结点等操作。
1. 查找结点
在查找元素时,链表只能从头结点开始向后,一个结点一个结点逐一查找,如下图所示:
图7-单向链表查找结点示意图
时间复杂度分析,分两种情况:
查找头结点:头结点是链表的第一个结点,直接就能得到结果,因此查找头结点时间复杂度是O(1)。
查找非头结点:如果查找非头结点,则需要从头结点向后依次查找,知道整个链表的末尾,因此查找非头结点的其他结点时,时间复杂度是O(n),最坏情况下时间复杂度也是O(n)。
2. 更新结点
更新结点操作需要两个步骤:
找到要更新的结点;
将旧数据替换成新数据。
如下图所示:
图8-单向链表更新结点数据操作示意图
与查找结点操作时间复杂度情况类似,更新时间复杂度分两种情况:
更新头结点:单向链表更新头结点的时间复杂度是O(1);
更新非头结点:更新其他结点的最坏情况时间复杂度是O(n)。
3. 插入结点
3.1 尾部插入
尾部插入即把最后一个结点的next指针指向新插入的结点即可,如下图所示:
图9-单向链表尾部插入结点示意图
时间复杂度分析:如上图所示,若尾部插入结点,则需要从头开始遍历,因此单向链表添加尾结点的时间复杂度是O(n)。
3.2 头部插入
头部插入新结点需要两个步骤:
(1). 把新结点的next指针指向原先的头结点;
(2). 把新结点变为链表的头结点。
如下图所示:
图10-单链表头部插入结点示意图
时间复杂度分析:因为直接将新节点的指针域指向头结点即可完成操作,因此添加头结点的时间复杂度是O(1)。
3.3 中间插入
在链表的中间位置插入结点同样需要三步:
(1). 从头结点开始向后查找,找到要插入的结点的位置;
(2). 新结点的next指针指向插入位置的结点;
(3). 插入位置前置结点的next指针指向新结点;
示意图如下:
图11-单向链表中间位置插入结点
时间复杂度分析:若执行插入结点操作,首先需要从头结点向后查找,找到要插入的位置。很明显,与链表的规模有关,因此中间插入结点操作的时间复杂度是O(n)。
4. 删除结点
4.1 尾部删除
若希望删除链表的最后一个结点,只需要将倒数第二个结点的指针域指向null即可,如下图所示:
图12-单向链表尾部删除结点示意图
时间复杂度分析:因为要从头开始遍历,所以单向链表删除尾结点的时间复杂度是O(n)。
4.2 头部删除
头部删除与头部插入操作类似,只需要把链表的头结点设为原先头结点的next指针即可如图:
图13-单向链表头部删除结点示意图
时间复杂度分析:删除头结点的时间复杂度也是O(1)。
4.3 中间删除
中间位置删除结点操作类似于中间插入操作,需要三步:
(1). 从头结点开始向后,找到要删除结点的位置;
(2). 找到删除结点的前一个结点和后一个结点;
(3). 将要删除结点的前置结点的next指针,指向要删除元素的下一个结点;
如下所示:
图14-单向链表中间删除结点示意图
时间复杂度分析:因为需要从头结点开始进行查找,因此时间复杂度与链表的规模有关,故单向链表删除中间位置结点的时间复杂度是O(n)。
五. 结语
本篇文章,我们一起学习了链表的概念,认识了单向链表、双向链表、循环链表等不同的链表类型。并以单向链表为例,分析了链表中的结点炒作及对应的时间复杂度分析,不知道你现在对链表了解了吗?
关键词:
焦点信息:5分钟学会数据结构中的线性链表
Python工具箱系列(三十五) 全球新消息
vue使用 elementUI中el-upload的遇到的问题总结
【新华解读】可转债退市机制逐步完善 未来或迎来“宽进宽出”市场生态_全球新动态
两批次食品不符合国家标准上黑榜 全球快资讯
俩石柱子被五菱一下子撞飞 附近店家感慨:此乃神车
米哈游去年赚了161亿!网友:够再开发十个《原神》了
每日快报!时代变了!未来18个月内 传奇瑞等大量国产车企将进入英国市场
世界速讯:越南因罕见高温遭遇“停电危机”:佳能等企业轮流停电
全球视讯!多种口味:和路雪经典大梦龙多口味雪糕16支88元发车
物联网开源操作系统简介 天天快资讯
Jenkins + Docker 一键自动化部署 Spring Boot 项目,步骤齐全,少走坑路! 全球微动态
甘肃省加快推进交通项目建设 每日快播
《暗黑4》第一件“军帽”在韩服现身 官方证实:最强欧皇诞生 属性无敌
苹果回应Mac Pro弃用AMD显卡:压根就不适配_天天微速讯
VIP体验卡到期!高考后饭菜的反差让人猝不及防:从“吃啥有啥”变“有啥吃啥”
今日报丨windows图片查看器修复(windows图片查看器)
解读投顾新规(一)| 扭转投顾“产品化”倾向 引导行业回归服务本源
【读财报】基金发行透视:年内发行规模同比下降15% 鹏扬、国融基金产品发行失败_全球快资讯
国家助学贷款累计发放超4000亿元 惠及2000多万名学生
曝苹果开发Vision Pro更便宜版本:屏幕、处理器会缩水|世界看热讯
A卡降价太狠 NVIDIA坐不住:RTX 4060将提前上市 2399买吗?|焦点
汽车人险胜蜘蛛侠
产销两旺 新能源车消费涌热潮
读改变未来的九大算法笔记10_读后总结与感想 播报
动力电池回收赛道不断升温 上市公司积极挖掘新蓝海-环球热推荐
全球速读:女子220斤家人为激励减肥奖6万 已减超20斤:网友鼓励加油
当前速递!显卡不买丐版就亏了?到底该怎么选?
电路中的pnp是什么意思(电路中pn结是什么意思) 世界关注
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景
面对英特尔大小核CPU AMD调整CPU供货和价格-每日速递
新华三率先推出私域行业大模型:百业灵犀
大师名团密集来京演出,“演艺之都”绽放国际星光 前沿资讯
白蛋白的功效与作用是什么_白蛋白的功效与作用 世界热点
“双万亿”之城、世界工厂……制造业重镇东莞涌现新动能-全球快看
刀锋战士2迅雷下载链接(刀锋战士2迅雷下载)-当前独家
每日热闻!蓝莓树苗怎么种植盆栽_蓝莓树苗怎么种
如果我是清风我将什么续写句子_如果我是清风我将
ps哪个版本最好用2020(ps哪个版本最好用)_全球时快讯
现在满族人的姓氏汉化 满族人的姓氏都有哪些-全球信息
世界观点:电信营业厅电话费_电信营业厅电话
全球热头条丨珠峰被救女士拒绝支付救人费用引争议 登山公司公布遇险原因
引用《道德经》,谈大国分歧,Sam Altman 最新演讲:AI 安全始于足下_环球报道
天天讯息:英媒:经济学家预测美国需至少加息两次才能平息通胀
热推荐:铃木天语sx4二手车(铃木天语sx4隐藏功能是什么?)
从“国家宝藏”到“何以中国”,总台文博类综艺这样创新实践|文化和自然遗产日
【天天播资讯】【技术积累】Java中的泛型【一】
天天亮点!HBase的数据结构原理与使用
Xilinx GTH 简介 ,CoaXpress FPGA PHY 部分-天天短讯
左偏树-环球观点
世界最新:ChatGPT只讲这25个笑话!有90%重复 网友:幽默是人类最后的尊严
环球速讯:火车站按摩椅现大量虫子 商家:每天都有打扫 很少有这种情况
焦点滚动:福建多地为何纷纷成立这一机构?
聚焦:希捷4TB机械硬盘史低 仅售288元
社交综艺为何能成爆款_世界百事通
芯片的战争
这些年,祝勇的“纸上故宫”都在写些什么?|文化观察 天天讯息
List 接口及其常用方法 全球即时看
文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题 全球新要闻
吢丕的另一个情侣网名(吢)
环球短讯!最后一艘潜艇电影国语版百度云(最后一艘潜艇电影国语版)
镁条在空气中燃烧发出耀眼的白光(镁条在空气中燃烧)
女朋友不理你怎么办表情包_女朋友不理你怎么办
南京两大厦间现龙卷风:强风至路面闪现火花 每日视点
当前简讯:14代酷睿要来了 英特尔13代酷睿i9包装简化:独特身份消失
预计2025年突破万亿元规模 产学研各方共议储能大赛道
徐州城下城遗址博物馆“上新”
天天热点!金陵十二钗判词及人物(金陵十二钗判词)
每日消息!散水模板工程量怎么计算(算混凝土工程量散水怎么计算)
今日快讯:口腔材料app(口腔材料网)
焦点热议:好高骛远的读音_好高骛远的意思
今日热议:Hbase安装和shell客户端操作
Web安全-渗透测试-信息收集01|全球热文
世界热消息:杯具!上海一小区电动车爆炸起火 家人惨被烧伤:网友吵翻为何电池拿回家充电
莫扎特的一句话(关于莫扎特的话例如说他天真)
世界热点!莫扎特的一句话(关于莫扎特的话例如说他天真)
清远公用品牌IP形象亮相-全球播报
关于铁路计次票、定期票 如何购买使用 环球聚看点
天天视点!多地高温预警 今年618空调没促销降价:还有经销商趁机涨价
龙爸无双100集电视剧免费观看|当前热门
第二届联合国人居大会闭幕 通过“人人享有可负担住房”等决议_百事通
消息!第二届联合国人居大会闭幕 通过“人人享有可负担住房”等决议
中超综合:中超第一阶段结束 上海海港领跑积分榜
中超积分榜:海港领跑三镇仅第8 大连人倒数第一
第34届中国经济新闻奖:21世纪经济报道获评论一等奖、融合报道一等奖 天天精选
全球讯息:武汉到清江画廊旅游攻略_清江画廊旅游攻略
新动态:最美童星长大后惊艳全网!16岁时因“不够性感”被导演刷掉,她霸气怒怼:恶心的猪!
窒息灭火法是指什么_窒息灭火法
全球快资讯:美国旧金山毒品泛滥、暴力犯罪猖獗 市民称正在目睹西方文明崩溃
每日热门:引导资金支持绿色发展 新华碳科技指数发布
这些大胆的古早综艺,真的是不付费就能看的吗? 当前消息
《暗黑破坏神4》差评如潮 跌到5.1分了_世界焦点
最资讯丨蓉火传递启动|“中国民航英雄机组”成员毕楠:当上火炬手,是荣誉也是责任
社区多元化多角度全方位服务新业态新就业群体
以太阳鸟为标志 G985高铁列车因高考火了:网友打卡沾喜气
湖南景区回应游客漂流翻船:第一天开业人多 放水没控制好-即时看
每日一猜6月10日:哪款能重塑眼镜人士新体验 世界快播
热点在线丨7744小游戏盒_7743小游戏
北京铁路:6月15日起,京津城际、京唐城际等线路运行图有调整
五部门联合启动河湖安全保护专项执法行动