单链表(1)

news2024/11/17 21:55:53

前面的顺序表是顺序存储(类似于数组),下面的链表是链式存储。物理是否相邻就看其存储地址(格子)是否相邻挨在一起。逻辑是否相邻看其前驱后继。

例如上面3个数据

如果存在顺序表中,那就是100的后继是200,200的后继是150,有100,200,150三个格子的有效数据,且这三个格子是按前驱,后继有序的相连着,这就是逻辑相邻。而格子的地址挨在一起就是物理相邻。如下图,3个格子挨在一起

如果存在链表中,那么每个格子的前驱,后继都不变也就是仍然逻辑相邻,100的后继还是200,但200的这个格子地址就不一定和100的格子地址挨在一起了。200的格子地址可能比100的格子地址大,也可能比100的格子地址小,其在哪里都有可能。

那要寻找100的后继200这个数字要怎么找——

前面顺序表找后继可以直接用下标i,因为其地址是相邻挨在一起的。

而在链表里面,你也不知道地址在哪里,那么就需要一开始就把它的地址标记起来。

那么链表里的格子就要再加一个东西,在每一个当前数据格子的下面再加一层,将当前数据的后继数据的地址存在里面。(当前数据,后继地址)

假设现在150是最后一个数据,按理说150的下面应该登记写上它下一个数据的地址,但150后面没有下一个数据了,所以150的下面就应该写一个空(NULL).表示其为末尾元素,没有后继了。

现在单链表的形式就成了,保存了地址为300,就指向地址为300的数据200,保存了地址为100,就指向地址为100的数据150,保存地址为空,就完了。

那么单链表的结构就长成这个样子

现在来看图写话,写出单链表的结构体struct Node,包含2个成员,整型数据类型的数据(名为date)和单链表结构体类型的指针(名为next)

((*)为指针,其前面写的为指针的类型,即指针指向的东西的数据类型是什么,后面写的为指针的名字,先给指针起个名字叫next,就是下一个地址的意思;而指针的类型还是跟它一样的struct Node,因为它指向单链表中的下一组跟它当前的结构样子是长的一样的,单链表中每一组都包含2个成员,数据和指针。而跟它长相一样的结构就又还是定义了的struct Node)。如图

所以单链表的结构体设计就长成这样

现在来分析一下这个单链表带不带头结点——

头结点就是用来指向表中的第一个数据。因为如果要访问单链表中这一串数据,要先指向第一个数据后,再通过其下面的指针访问每个后继。

所以需要一个头指针(即头结点)指向第一个数据的存储地址。

假设这个头指针的名字叫plist,那么通过plist所指的地方,就能找到第一个数据100。接着再访问每个后继,直到后继为空,则前面找到的所有数据就是单链表里面所存储的数据。

那么现在单链表就是长成这个样子

接下来在这种形式的单链表中,数据应该怎么插入——

例如在100前面插入一个数据10,插入完后的样式应该是这样

那么现在plist就要指向数据10的地址,因为10变成了第一个数据,然后数据10的next指向数据100的地址。

现在plist就要从指向100的地址改变为指向10的地址,也就是plist指针指向变了。C语言里面学过要改变指针的指向需要——传指针解引用。而plist本身就是一个指针,再传指针就变成了二级指针。同理删除是直接穿过要删除的数据指向下一个数据,也要改变指针方向。但二级指针就更复杂一些

所以需要一个做任何操作都永远不改变plist指向的方法,让plist一直指向头结点——加一个头结点,这个头结点里面的数据永远不用,不算作第一个数据,也就是头结点里没有不放数据。真正的有效数据从头结点的下一个节点开始,也就是100仍然是第一个数据,头结点的next指向第一个有效数据的地址。

现在要往100前面插入数据或是直接删除数据100,plist都不用改动,只改变头结点的next指向就好了。

所以上图就是单链表的最终结构设计,单链表的处理必须要带有头结点。这里plist指向头结点的地址200.在对第一个数据结点做任何操作时它都不会变。

 而其实现函数跟顺序表差不多,因为它们都属于——线性表。线性表分为顺序存储和链式存储。

链式存储就是这个单链表。

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

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

相关文章

网络测试工具—— iperf2 安卓APK 下载 及简单使用

网络测试工具—— iperf2 安卓APK 下载 及简单使用 前言一、iperf2是什么?二、使用步骤附上help中命令截图翻译总结 前言 项目上有一款安卓车机加载局域网图片加载非常慢,所以需要测试一个安卓车机设备的带宽,经过调研后使用到了iperf2。 一…

【Android】Debug时禁用主线程ANR限制

ANR全称Application Not Response,指主线程超过5s无响应,应用会自动退出 由于这个线程,如果我们给主线程加了断点,就会触发ANR,导致调试时应用退出 这样调试起来会非常麻烦,其实对于Debug应用&#xff0c…

解决springboot整合websocket、redis、openfeign,redisTemplate,openfeign的类无法注入的问题

在部分业务中,我们需要使用长连接,我们可以使用http长连接或者websocket,在springboot作为后端的框架中, 可以借用的技术是(netty,websocket) 版本如下 软件版本号jdk21springboot 3.1.5 spri…

企业微信开启接收消息+验证URL有效性

企业微信开启接收消息验证URL有效性 📔 千寻简笔记介绍 千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对…

[极客大挑战 2019]Upload 1

题目环境&#xff1a; 根据题目和环境可知此题目是一道文件上传漏洞 编写一句话木马脚本<?php eval($_POST[shell]);?>将脚本文件更改为jpg图片文件我这里是flag.jpg上传文件并burpsuite抓包Repeater重放 报错一句话木马里面有<?字符 换一种一句话木马继续编写木马…

iOS实现代码混淆

​ 目录 前言 ipaguard界面概览 ipaguard启动界面 ipaguard代码混淆界面 资源文件混淆界面 重签名界面 前言 本文章向大家介绍iOS实现代码混淆&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需…

高德地图设置电子围栏

高德地图设置电子围栏 需求效果图代码实现 需求 给地图上人员锚点设置围栏区域&#xff0c;如果在此区域内则是在线状态&#xff0c;不在此区域内则是离线状态 效果图 双击可编辑或清除当前围栏 代码实现 前端实现区域框选&#xff1a; //引入高德地图sdk"amap/amap…

Python语言高级实战-内置函数super()的使用之类的多继承(附源码和实现效果)

实现功能 super()函数的调用顺序是按照方法解析顺序&#xff08;Method Resolution Order, MRO&#xff09;来确定的。MRO 是一个确定继承顺序的算法&#xff0c;它使用 C3 线性化算法来避免潜在的方法冲突。Python会根据继承顺序自动计算 MRO&#xff0c;我们只需要使用 supe…

人人都会的 Blazor —— 1.3 项目结构

项目结构 使用 Visual Studio 2022 创建 Blazor 项目。 在搜索框中输入【blazor】关键字,将列出以下已经存在的项目模板: Blazor Server App:基于 Blazor Server 托管模型的项目,并建立一些示例代码和组件;Blazor WebAssembly App:基于 Blazor WebAssembly 托管模型的项…

CSS 外边距、填充、分组嵌套、尺寸

一、CSS 外边距&#xff1a; CSS margin&#xff08;外边距&#xff09;属性定义元素周期的空间。margin清除周围的&#xff08;外边框&#xff09;元素区域。margin没有背景颜色&#xff0c;是完全透明的。margin可以单独改变元素的上、下、左、右边距&#xff0c;也可以一次改…

响应式招标投标网站模板源码带后台

模板信息&#xff1a; 模板编号&#xff1a;29165 模板编码&#xff1a;UTF8 模板分类&#xff1a;博客、文章、资讯、其他 适合行业&#xff1a;招标类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&a…

Python基础入门(5)----Python中的变量和表达式:变量的定义、赋值和数据类型转换

文章目录 Python中的变量和表达式:变量的定义、赋值和数据类型转换变量的定义变量的赋值数据类型转换注意事项表达式总结Python中的变量和表达式:变量的定义、赋值和数据类型转换 Python是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。在Python编程中,变量和表…

arcgis 批量删除Table中的某些Field

当shp或者table文件较少时&#xff0c;可以手动删除每个文件中的某些字段&#xff0c;当文件较多时&#xff0c;就需要使用arcpy或者model进行处理。

字节测试开发岗面试竟如此简单...

前言 因为读者里有不少刚入门测试的同学&#xff0c;这两天抽空整理了一份字节测试开发岗的面试题答案&#xff0c;说实话这个题目真挺简单的&#xff0c;如果你面大厂碰到此类面试题&#xff0c;也算是运气很好啦。大家也可以先自测一下&#xff0c;看看自己能不能答上来。 如…

图片文件过大怎么压缩?五种压缩方法大全

图片文件过大怎么压缩&#xff1f;不知道大家有没有遇到过这样的尴尬情况&#xff0c;当我们将一些图片上传到某个网站的时候&#xff0c;被提示图片大小操作了网站的限制而被禁止上传&#xff0c;我相信很多人都遇到过吧&#xff0c;其实这是网站的一张防御措施&#xff0c;防…

aosp定制android系统

目录 AOSP 准备工作(配置) 确定机型和版本 初始化 git安装 curl安装 同步源码 环境变量 创建aosp目录 指定同步版本 解下来安装编译需要的依赖 编译aosp源码 刷入系统 AOSP 全称 Android Open Source Project 是指Android开源项目&#xff0c;它是由Google主导的…

【Java】BMI身体质量指数计算工具

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍BMI身体质量指数计算工具的Java实现。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

服装和纺织品在欧盟和英国售卖需要做哪些认证?REACH认证、EN14682认证

近期&#xff0c;不少亚马逊卖家在欧洲和应该售卖纺织品和服装都遇到了安全问题&#xff0c;下架的理由都是不符合产品安全的要求&#xff0c;下架邮件有以下几种&#xff1a; ①标签不合规 ②不符合安全标准 那么&#xff0c;纺织品出口到欧盟和英国&#xff0c;具体有哪些要…

智能井盖传感器功能,万宾科技产品介绍

在国家治理方面&#xff0c;对社会的治理是一个重要的领域&#xff0c;一定要在推进社会治理现代化过程中提高市政府的管理和工作能力&#xff0c;推动社会拥有稳定有序的发展。在管理过程中对全市井盖进行统一化管理&#xff0c;可能是市政府比较头疼的难题&#xff0c;如果想…

新开普智慧校园系统RCE漏洞 [附POC]

文章目录 新开普智慧校园系统RCE漏洞 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 新开普智慧校园系统RCE漏洞 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#x…