浅谈二刷链表的感受以及引发的思考

1.总括

链表这个东西,就是一个非连续的物理结构,也属于这个线性表的一种,但是不像顺序表那样在这个物理结构上面是连续的,因此我们没有办法通过下标对于这个链表进行遍历,而是需要一个next指针进行这个指向的说明;

链表是有很多个节点组成的,每一个节点有两个部分组成,一个就是data,也就是这个节点对应的数据,还有一个就是next指针,用来指向下一个节点,通过这个指针来找到下一个节点,无数个这样的节点组成了链表;

链表划分为这个单链表和双链表,我们前期进行模拟实现的功能,就是针对于这个单链表而言的,毫无疑问,这个单链表就是只有一条链,双链表就是有两条链,我们后期也会进行相应的了解,但是我目前觉得还是这个点链表使用的多一些;

2.为什么要学习链表

(1)我们前面已经实现了这个顺序表,顺序表和链表的功能基本上就是一样的,思路也差不多,为啥呢么要学习链表呢?

(2)在我这个初学者看起来,要想知道原因,首先要从这两者的结构入手去分析,这个顺序表就是有这个数组,数据的个数,以及这个容量三个部分组成的,而且我们学习的还是动态的顺序表,可以进行这个扩容,好像也是很方便的,空间够就对应操作,空间不够就扩容;

(3)但是有一点就是这个顺序表在中间插入数据的时候需要进行这个挪动,挪动的话这个需要从挪动的位置开始挨个的进行遍历,这个就显得很浪费时间,但是这个链表的优势就会凸显出来,因为这个链表不是连续的,因此这个我们只需要把插入位置的前一个指针指向插入的数据,插入数据的指针指向插入位置的下一个数据,这个只需要改变前后两个节点的指针的指向就可以很高效的解决这个问题;

(4)虽然表面上看,这个链表插入数据的时候,改变一下这个节点的指针指向就可以了,但是实际操作起来并非易事,因为这个很考验我们对于这个指针的理解和运用,尤其是尾插,头插数据的时候,还要用到二级指针,这个让一些同学更是望而生畏,何况这个二级指针是我们通过调试才可以发现这个问题,第一次写的时候很难会想到,指针之间的赋值,指向等等这些对于我们都是不小的考验;

(5)相比之下,这个顺序表就和蔼了很多,因为这个顺序表是使用数组,我们需要使用循环结构,这个只要我们进行认真的分析,结束条件,循环语句也不是很困难写出,这个就相比指针降低了门槛,而且,使用链表里面的指针会出现这个空指针,野指针的问题,这些都对于我们提出了严格的要求;

(6)但是,链表作为这个数据结构,我们还是必须好好掌握的,事虽难,做则必成,我也是一遍一遍的学习走过来的,我在第一遍学习的时候也是感觉这个真的好难好难,但是只要我们多学几遍,我认为还是可以拿下的,就看我们有没有这个毅力了,大学计算机,想要高薪(可能有些功利化,但是这个也是计算机分数线久高不下的原因吧),就必须克服这些困难,其实这些也不是困难,因为我相信一句话:只要是学习能够解决的问题,就不是什么困难;

其实很多时候,我们只是在这个学校里面学习知识,如果我们不练就自己的本事,很难想象我们在工作的时候的场景,我坚信只有自己强大,技术过硬,才可以有选择的底气;

(7)还有一点需要我们注意的就是这个顺序表需要动态的开辟空间,因此这个使用的函数是realloc函数,这个函数可以进行增容,但是对于这个链表,例如这个在头插的时候,肯定也要开辟新的节点,这个时候我们只需要使用malloc函数就可以了,因为这个不涉及到动态增容的问题;

3.链表的诸多功能实现

(1)其实这个链表的功能实现,无非就是增删查改数据,和顺序表没有什么区别,但是因为是使用的指针,所以可能在这个操作上面会有所区别,但是这个大体的思路是肯定不会变的;

(2)我们还是需要定义这个相关的函数,例如这个链表的打印,链表的头插,尾插,头删,尾删,为了方便我们的查看效果,我们还可以定义一个打印的相关函数;

(3)首先应该是实现的尾部插入数据,这个时候肯定是要开辟出一个新的节点,把这个数据存到这个节点里面去,原来我们的最后一个节点指向的是空的,现在我们需要让这个节点指向这个新的节点,然后让这个新的节点指向null指针;

这个还需要考虑这个链表本身是不是空的,如果是空的,我们直接把这个新的节点作为头结点就可以了,如果不是空的,我们还需要使用循环找到最后一个节点,然后进行相关的操作;

(4)头部插入数据相比较而言就会比较简单,因为我们只需要开辟新的节点空间,让这个新的节点的指针指向原来的头结点,然后再让这个新的插入节点成为头结点;

(5)尾删数据节点也是比较复杂的,因为这个时候需要定义两个指针,例如有12345这五个节点吧,我们想要删除5这个节点,这个时候我们就需要先找到这个5节点,还要标记一下4这个节点,删除5节点,把这个4节点指向空指针,这个时候我们必须要记录一下最后一个节点前面的节点位置,方便我们把这个节点作为新的尾节点;

但是对于一个没有很多节点的链表,我们就不需要标记前面的节点了,因为就不存在,这个只有一个tail节点,没有prev节点,我们直接删除这个节点就可以了,然后置为空;

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

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

相关文章

中文技术文档的写作规范(搬运)

阮一峰老师的《中文技术文档的写作规范》搬运。 链接指路: https://github.com/ruanyf/document-style-guide/tree/master 内容:对中文技术文档从标题、文本、段落、数值、标点符号、文档体系、参考链接等七大方面进行了简明扼要的介绍。

网络安全练气篇——PHP编程语言基础

目录 PHP基础 一、PHP简介与环境搭建 什么是PHP? PHP环境安装 代码编辑选择 二、基本语法 PHP基本语法操作 PHP变量与输出 啥是常量? PHP注释 PHP单引号双引号声明 三、PHP表单 PHP表单 四、登录界面搭建与讲解 构建登陆页面 登陆页面端 服务器端…

汽车油耗NEDC与WLTP有什么区别?以及MATLAB/Simulink的汽车行驶工况仿真

最近的热点新闻非比亚迪的秦L莫属,其油耗达到2.9L/100km,但其标注为NEDC也引起了讨论, NEDC与WLTP的区别 NEDC的全称为“New European Driving Cycle”,即“新欧洲驾驶循环”。这种油耗测试标准起源于上世纪80年代,主…

计算机类期刊含金量横纵向对比(一)

本文期刊横纵向对比数据均来源于知网、知乎、谷歌学术、博客网、百度百科、发表者论坛所综合提取的数据对比。(经验分享) 期刊 难度比较 含金量 发表领域(侧重点) 审稿速度 收录情况 费用 计算机应用 对投稿者学历工作要求…

近期笔记总结

都是最近项目中会用到的一些小方法 写个笔记整理一下 方便之后忘了找不到 1、相同字段的对象 直接赋值 主要是用到编辑的功能里面 拿到的查询字段和需要赋值的字段一模一样时 不用一个一个的去写等于了 assingTab(arrA,arrB){Object.keys(arrA).forEach(key > {arrA[key] a…

液晶拼接屏企业应该采取哪些措施来提升整体竞争力和市场地位呢?

步入智能科技时代以来,商显行业面对着各式各样的挑战,人工智能、AI大模型等整合中,液晶拼接屏企业应该采取哪些措施以提升整体竞争力和市场地位。下面小编个人观点简单说一下;下是一些关键的措施: 首先,加…

Java文件复制方法详解:原理、使用场景、优缺点及代码示例

1. 基本文件流 (FileInputStream 和 FileOutputStream) 原理 基本文件流通过逐字节读取和写入文件来实现文件复制。这种方法简单直接,但效率较低。 使用场景 适用于小文件或对性能要求不高的场景。 优缺点 优点: 实现简单,容易理解。适…

用Vue3和p5.js打造一个交互式数据可视化仪表盘

本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于 Vue.js 集成 p5.js 实现交互式波形图 应用场景介绍 在数据可视化领域,波形图广泛应用于展示动态变化的数据,如声音信号、心跳曲线等。通过动态绘制波形图,用户可以直观…

5.所有权

标题 一、概念二、规则三、示例3.1 变量作用域3.2 所有权的移交(深拷贝与浅拷贝)3.3 函数与所有权3.4 返回值与作用域3.5 引用的使用 四、切片(&str) 一、概念 所有权是Rust的核心特性。所有程序在运行时都必须管理它们使用计算机内存的方式。Rust的…

InfoComm 2024 直击:千视新品P3和KiloLink技术闪耀亮相

InfoComm 2024 直击:千视新品P3和KiloLink技术闪耀亮相,现场亮点不断 北京时间2024年6月13日,UTC-7时间6月12日,美国视听显示与系统集成展览会InfoComm 2024在美国拉斯维加斯正式开幕。作为全美规模最大、最具影响力的展会&#…

【Test 73 】引用 () 实际的一些用法、常引用问题 详解!

文章目录 1. 常引用的背景2. 字符 a 与 整形 97 是相同的,但是具体是怎么比较的呢 ? 1. 常引用的背景 注意: 🐧① 权限可以平移、可以缩小,但是权限 不可以放大。 🐧 类型转换中间会产生临时变量 2. 字…

[AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现

AI资讯 国产AI大战高考物理,第1题全对,第2题开始放飞终于放大招了,2024WWDC,苹果开启AI反击战苹果一夜重塑iPhone!GPT-4o加持Siri,AI深入所有APPOpenAI确认苹果集成ChatGPT 还任命了两位新高管GPT-4搞不定…

python爬虫入门:批量下载图片

引言: 爬虫也被称为网络蜘蛛(Spider),是一种自动化的软件程序,能够在互联网上漫游,按照一定的规则和算法抓取数据。 爬虫技术广泛应用于搜索引擎、 数据挖掘 、信息提取等领域,是互联网技术的重要组成部分。 摘要: 很多初学者对于一个这样新奇的事务当然愿意去探索,…

【Golang】探索进程资源监控的精妙细节:利用Gopsutil/Process实现高级进程性能和资源信息监控

【Golang】探索进程资源监控的精妙细节:利用Gopsutil/Process实现高级进程性能和资源信息监控 大家好 我是寸铁👊 总结了一篇【Golang】探索进程资源监控的精妙细节:利用Gopsutil/Process实现高级进程性能和资源信息监控的文章✨ 喜欢的小伙伴…

Scrum Day盛大启幕【限时优惠】

关于 Scrum Day 智驭未来,敏捷先行 —— 2024中国Scrum大会启航 在全球数字化转型的浪潮中,敏捷已成为企业脱颖而出的关键。 Scrum中文网携手全球敏捷行业巨擘 —— Scrum.org 联袂呈现年度敏捷盛会 Scrum Day,将于今秋盛大启幕&#xff01…

Ubuntu Linux目录结构

在Linux系统中,最小的数据存储单位为文件。“一切都是文件”是Linux和UNIX一致贯彻的原则。也就是说,在Linux中,所有的数据都是以文件的形式存在的,包括设备。为了便于访问文件,Linux按照一定的层次结构来组织文件系统…

使用宝塔面板 将vue+node+mysql部署至云服务器

数据库部署 1. 导出 数据库 2. 进入宝塔面板 将数据库文件导入至宝塔面板数据库中 验证是否导入成功 点击phpMyAdmin 输入用户名密码 如果没有导入成功,可在此再导入一遍 前端项目部署 1. 将vue项目打包上传至文件 npm run build 打包成dist文件夹 压缩上传 …

解决Apache Doris占用CPU和内存过高

一、导入问题 对于 Doris 来说,一个 INSERT 命令就是一个完整的导入事务。因此不论是导入一条数据,还是多条数据,我们都不建议在生产环境使用这种方式进行数据导入。高频次的 INSERT 操作会导致在存储层产生大量的小文件,会严重影…

音视频开发-- 坑整理

1. 解码时,一定要用avcodec_parameters_to_context(),将流的参数(stream->codecpar)复制到解码器中,否则某些流可能无法正常解码。 //第七步,给给解码器上下文添加参数, avcodec_parameters_to_context(…

Linux-黑马程序员

目录 一、前言二、初识Linux1、操作系统(1)硬件和软件(2)操作系统 2、Linux3、虚拟机4、FinalShell5、WSL6、虚拟机快照 三、Linux基础命令1、Linux的目录结构2、Linux命令入门(1)Linux命令基础格式&#x…