链式存储之:链表的引出及其简介

2023-11-17

上篇博客,笔者讲解了一下顺序表ArrayList,对于ArrayList有想法的各位老铁可以看一下:值得思索的:ArrayList和线性表,你确定错过这次机会_念君思宁的博客-CSDN博客值得思索的:ArrayList和线性表,你确定错过这次机会??https://blog.csdn.net/weixin_64308540/article/details/128322151?spm=1001.2014.3001.5502对于这篇博客,算是熬近了笔者的心血,导致最后休息了好几天才缓过来!!既然笔者能写出上篇的文章,那么笔者对于链表,想必也能写出一样优秀的文章,那么就请齿目以待吧!!加油!!

对于顺序表,想必知道的各位老铁已经知道了,不知道的各位老铁再怎么劝说也不一定不知道!!尴尬!!

那么言归正传吧!!

通过上篇博客的学习,对于顺序表,我们可以看出:

顺序表ArrayList:

优点

当给定下标的时候,查找速度非常块(适合给定下标的查找,时间复杂度为O(1)

缺点

插入必须得挪动元素,才能插入(时间复杂度为O(N))

删除必须得挪动元素,才能删除(时间复杂度为O(N))

扩容每次的扩容也会浪费资源的(有10个元素,想要放到第11个元素里面,会进行1.5倍扩容,变成15个,但是我们只有11个元素,这就意味着,我们会浪费掉4个空间,……一次类推,当数据越来越大的时候,……因此,每次扩容也是浪费空间的!!

既然顺序表有着那麽多的缺点??那么有没有一种方式,可以减少一点顺序表的缺点呢??因此,链表就可以引出来了!!

链式存储:链表!

链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。

链表就是跟火车的性质差不多,一个节点一个节点的有序联立起来!!

 链表是由一个节点一个节点组成的!每个节点至少要包含两部分!

 因此,我们有着:

注意:

1.从上图可以看出:链式结构在逻辑上是连续的,但是在物理上不一定连续!

2.现实中的节点一般都是从堆上申请出来的

3.从堆上申请的空间是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续!

其实,在数据结构中,链表是分种类的!!

单向,双向,带头,不带头,循环,非循环!

上面的几种来进行排列组合,我们可以发现:一共有8种链表组合!!

单向带头循环 双向带头循环
单向带头非循环 双向带头非循环
单向不带头循环 双向不带头循环
单向不带头非循环 双向不带头非循环

其中,在上述的8种组合种,我们在学习的过程中,主要强调的是:

单向不带头非循环:笔试面试都是考这个结构

双向不带头非循环:集合类底层是这样操作的!

下面笔者用画图的方式,来带领大家认识一下上述的8种组合!!

1.单向带头非循环

 在这里需要注意的是:head永远指向头节点,当把元素11删了,头节点仍然不会发生改变

2.单向不带头非循环

 对于这个:单向不带头非循环:结构简单,一般不会用来存储数据,实际中更多的是作为其他数据结构的子结构!如:哈希桶,用到的就是链表,等等,面试笔试中用到的也是很多!!

对于这个操作,head虽然指向11处的节点,说明此时11处的节点是这个链表的头部,但是,当我们把11这个节点给删除了以后,此时head就指向12处的节点,因此头节点head也就改变为:12处的节点了!!

3.单向带头循环

 因此,我们可以发现:单向的链表,是一直从前往后!!

而接下来我们要进行的是双向的链表:可以从前往后,也可以进行从后往前!

双向的节点

 因此,我们来认识一下:双向不带头非循环的节点:

 对于双向的其他组合,笔者就不再进行强调了!毕竟很少使用!我们在后续也不会进行讲解!

经过上面的几个讲解,我们可以看出来:

链表跟顺序表的区别:

链表:物理上(真实的内存)不一定是连续的,逻辑上(指向下一个)是连续的

顺序表:物理上和逻辑上都是连续的!

到此,笔者变将链表的基础知识讲解完了,那么后续的一篇博客,就该讲解链表的实现了!!有想法的各位老铁,可以后续跟踪笔者博客哟!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链式存储之:链表的引出及其简介 的相关文章

  • 如何将变量的全部内容发送/导出到文本文件/xml 文件/剪贴板?

    我想将实例的内容 最好以树形形式 发送给某人 打印屏幕是不行的 因为类太复杂了 您需要将输出转回实例吗 在这种情况下 其他答案都是正确的 如果您只想手动检查实例的内容 理想情况下您的类都将实现toString 你可以将其重定向到一个文件 如
  • 在Java中将*s打印为三角形?

    我在 Java 课程中的作业是制作 3 个三角形 一份左对齐 一份右对齐 一份居中 我必须为什么类型的三角形制作一个菜单 然后输入需要多少行 三角形必须看起来像这样 到目前为止 我能够完成左对齐的三角形 但我似乎无法获得其他两个 我尝试用谷
  • android.view.InflateException:二进制 XML 文件行 #11:膨胀类 ImageView 时出错

    我只是尝试制作一个小的 android java xml 应用程序来计算游戏的分数 它给了我这个错误 Error inflateing class ImageView 有人知道解决方案吗 我实际上搜索了 ppl 说添加这个 android
  • 将一种类型的对象声明为另一种类型的实例有什么好处? [复制]

    这个问题在这里已经有答案了 可能的重复 Base b2 new Child 是什么意思 表示 https stackoverflow com questions 4447924 what does base b2 new child sig
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • 具有 CRUD 功能的基于 Spring Web 的管理工具

    在 PHP Symfony 世界里有一个工具叫 Sonata Adminhttps sonata project org https sonata project org 基于 AdminLTE 模板 这是一款一体化管理工具 具有登录 菜单
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • 正则表达式在 Velocity 模板中不起作用

    我在 Test java 中尝试过这个 String regex lt s br s s gt String test1 lt br gt System out println test replaceAll regex 但是当我在速度模板
  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • 改变 Java 中凯撒移位的方向

    用户可以通过选择 1 向左或 2 向右移动字母来选择向左或向右移动 左边工作正常 右边不行 现在它显示了完全相同的循环 但我已经改变了所有 and 以不同的方式进行标记 最终我总是得到奇怪的字符 如何让程序将字符向相反方向移动 如果用户输入
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • Java和手动执行finalize

    如果我打电话finalize 在我的程序代码中的一个对象上 JVM当垃圾收集器处理这个对象时仍然再次运行该方法吗 这是一个大概的例子 MyObject m new MyObject m finalize m null System gc 是
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • java中的预增量/后增量

    有人可以帮助我理解为什么 int i 1 int j 1 int k 1 int l 1 System out println i i System out println j j System out println k k System
  • java.lang.ClassCastException:com.sun.proxy.$Proxy8 无法转换为 org.openqa.selenium.internal.WrapsDriver

    我有以下切入点和 AspectJ 中给出的建议 Pointcut call org openqa selenium WebElement sendKeys public void onWebElementAction After onWeb
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外

随机推荐

  • Python: Decorator Pattern

    DuDecorator py 装饰模式 Decorator Pattern import six https pypi org project six from abc import ABCMeta six add metaclass AB
  • 中断和串口的介绍

    一 中断的介绍 1 什么是中断 中断是指计算机运行过程中 出现某些意外情况需要主机干预时 机器能自动停止正在运行的程序并转入处理新情况的程序 处理完毕后又返回原被暂停的程序继续运行 2 中断都有哪些 中断主要分为系统中断和外部中断 3 中断
  • GauGAN (SPADE) 水记 (seg2img)

    GauGAN SPADE 水记 seg2img 根据语义mask生成图像 论文 Semantic Image Synthesis with Spatially Adaptive Normalization https arxiv org p
  • rsa非对称加密

    RsaUtil 私钥加密 公钥解密 import lombok extern slf4j Slf4j import sun misc BASE64Decoder import sun misc BASE64Encoder import ja
  • 在python中输入10个整数并求出最大值_python练习题 :用户任意输入10个整数到列表中,然后由大到小排列并输出。...

    一 填空题 1 python是一种面向 对象 的高级语言 2 python可以在多种平台运行 这体现了python的 可移植 特性 3 python源代码被解释器转换后的格式为 pyc 4 python3 x默认使用的编码是 UTF 8 5
  • 对数和指数

    参考 https www zhihu com question 21453993 这就相当于先发明减法符号 再发明加法符号 1614年 纳皮尔发明了对数和对数表 1637年 法国数学家笛卡儿发明了指数 比对数晚了20多年 1770年 欧拉才
  • 判断设备联网状态(Python)

    判断设备联网状态 Python 在Python中利用socket来判断设备是否联网 通过ping命令来验证设备的网络状态 完整代码如下 import socket def isNetOK testserver s socket socket
  • zed双目摄像头 +yolo进行双目测距

    zed双目摄像头 yolo进行双目测距 首先根据你电脑或者jetson系列中的cuda版本下载对应的zed sdk 去安装zed api 安装过程可能会出现import pyzed sl as sl ImportError DLL load
  • b站黑马的Vue快速入门案例代码——计数器

    目录 目标效果 重点原理 1 创建Vue实例的时候 2 v on 为元素绑定事件 3 v text 解析文本用 设置标签的文本值 v text 简写 为 实现步骤 代码部分 1 计数器模板 html 全是重点 2 index css 辅助作
  • ubuntu下安装jdk

    ubuntu下的jdk 氛围open jdk和oracle jdk两种 前者是开源的 其实也行 不过大部分人使用的还是oracle jdk 有些博客推荐用ppa的方式安装 但这个安装的链接被墙了 所以经常会安装失败 现在介绍另一种 手动解压
  • 解决vscode远程安装插件不了、安装太慢问题

    一 问题描述 一直显示正在安装 几个小时也没动静 特别是那个c c 插件的安装 二 解决方法 1 采用手动安装插件的方式 步骤 先去这个网站找你要安装的插件 然后下载到本地电脑 All categories Extensions Visua
  • React 入门教程系列(三)——JSX 和 虚拟 DOM

    文章目录 1 JSX 2 虚拟 DOM 3 实例1 4 实例2 5 源码 1 JSX JSX的全称是 JacaScript XML 是 React 定义的第一种类似于 XML 的 JS 拓展语法 JSX 的语法大致遵循下面几条 标签名任意
  • C++中拷贝构造函数的四种调用方式

    代码 define CRT SECURE NO WARNINGS include
  • 分享一个iec104协议的资源,一个模拟iec104协议主站端的小工具

    最近编写的iec104协议的软件也基本稳定了 现在上传到资源上去留作备份 可实现功能 V1 005 2019 331 1 增加启动调用可执行文件目录下104 ini 调用遥信点表功能 增加显示SOE功能 2 增加显示SOE功能 根据读取的点
  • 数据库批量插入,存在则更新,不存在则插入

    INSERT ON DUPLICATE KEY UPDATE 语句 在并发量比较高的时候 可能两个线程都查询某个记录不存在 所以会执行两次插入 然后其中一条必然会因为主键 这里说的主键不是递增主键 冲突而失败 数据库层MySQL中INSER
  • Python中利用compileall将py项目打包成pyc项目

    在进行python项目开发的时候一定会涉及到项目打包这个环节 有时因为一些依赖的原因没法打包成一个大的可执行文件 但为了代码的安全性我们最起码需要打包成pyc的预编译格式 这样运行者 一般是测试和线上部署 在无法看到程序源码的同时也能顺利执
  • numpy.c_和numpy.r_的用法

    numpy c 将切片对象沿第二个轴 按列 连接 np c np array 1 2 3 np array 4 5 6 array 1 4 2 5 3 6 np c np array 1 2 3 0 0 np array 4 5 6 arr
  • UML类图几种关系的总结

    在UML类图中 常见的有以下几种关系 泛化 Generalization 实现 Realization 关联 Association 聚合 Aggregation 组合 Composition 依赖 Dependency 1 泛化 Gene
  • 子类加@Data后,IDEA调试时“出现”父类属性无值

    项目场景 自测一个功能的时候 IDEA调试同过对象的VIEW查看对象内容 发现加了 Data的返回子类型中父类的属性没有出现 问题描述 父类Response中的返回VO对象 Data public class PVO private Sti
  • 链式存储之:链表的引出及其简介

    上篇博客 笔者讲解了一下顺序表ArrayList 对于ArrayList有想法的各位老铁可以看一下 值得思索的 ArrayList和线性表 你确定错过这次机会 念君思宁的博客 CSDN博客值得思索的 ArrayList和线性表 你确定错过这