当前位置: 首页 > news >正文

数据结构4——线性表3:线性表的链式结构

基本概念

​ 链式存储结构用一组物理位置任意的存储单元来存放线性表的数据元素。

​ 这组存储单元既可以是连续的又可以是不连续的甚至是零散分布在任意位置上的。所以链表中元素的逻辑次序和物理次序不一定相同。而正是因为这一点,所以我们要利用别的方法将这些数据元素衔接起来。而链式存储结构通过存储下一个内容的地址完成衔接。这样,依次通过衔接,就可以将整张表串联起来。我们将存储的内容叫做数据域,将衔接叫做指针域。数据域和指针域共同构成了结点。之后我们只要记录下第一个元素的地址,就可以找到多有链表存储内容,第一个元素的地址叫做头指针。而由若干个结点由指针链组成了链表。

头指针:指向链表中第一个结点的指针

头结点:在首元结点之前附设的一个结点,不储存实际所需要的信息

设置头结点的好处:

(1) 便于首元结点的处理:首元结点的地址保存在头结点的指针域中,所以在链表的第一个位置上的操作和其他位置一致。

(2) 便于空表和非空表的处理:无论链表是否为空,头指针都指向头结点的非空指针,因此空表与非空表的处理也就统一了

首元结点:指向链表中存储第一个数据元素的结点

链表分类

单链表:结点只有一个指针域的链表

请添加图片描述

①不带头结点:

空表:头指针为空

②带头结点:

空表:头结点的指针域为空

双链表:结点有两个指针域的链表

请添加图片描述

循环链表:首尾相接的链表

请添加图片描述

链表的特点:

① 链表用一组物理位置任意的存储单元来存放线性表的数据元素,即逻辑上相邻的元素位置上不一定相邻。

② 访问时只能通过头指针进入链表,之后顺着结点一个个向后寻找。

顺序表->随机存取 链表->顺序存取

单链表

定义:

请添加图片描述

请添加图片描述

定义链表的两种方式:

Lnode *L; 或 LinkList L;

虽然两者的意思上差不多,但是对定义链表我们一般使用后者。

定义结点指针p两种方式:

Lnode *p;或 LinkList p;

虽然两者的意思上差不多,但是对定义结点我们一般使用前者。

例子:

请添加图片描述

请添加图片描述

基本操作的实现

单链表的初始化:

构造一个如图的空表

算法思路:

(1)生成新结点作为头结点 ,用头指针L指向头结点

(2)将头结点的指针域置空

请添加图片描述

判断链表是否为空:

算法思路:判断头结点指针域是否为空

单链表的销毁:

算法思路:从头指针开始,依次释放所有结点
请添加图片描述
请添加图片描述

单链表的清空:

与链表的校徽不同,清空链表后链表仍然存在,只不过链表中没有元素、成为空链表。

算法思路:依次释放所有结点,并将头结点指针域置空

请添加图片描述

注意点:由于单链表的清空不能把头结点删去,所以在链表结点的删除操作上比单链表的销毁更为复杂。

求单链表表长

算法思路:从首元结点开始,依次计数所有结点。

请添加图片描述
请添加图片描述

单链表的取值:(取单链表中的第i个元素)

算法步骤:

1、从第一个结点(L->next)顺链扫描,用指针 p 指向当前扫描到的结点,p 处置 p=L->next

2、j 做计数器,累计当前扫描过的结点数,j 初始值为1。

3、当 p 指向扫描到的下一个结点时,计数器 j+1。

4、当 j==i 时,p所指的结点就是要找的第 i 个结点。

请添加图片描述

单链表的查找:

算法步骤:

1、从第一个结点起,依次和e相比较

2、如果找到一个其值与e相等的数据元素,则返回其在链表中的位置或这地址

3、如果查遍整个链表都没有找到其值和e相等的元素,则返回0或者NULL

① 按数值查找——返回值

请添加图片描述

② 按数值查找——返回序号

请添加图片描述

前后两者的差别是:

按数据内容查找增加了j的初始化并增加了j++记数功能、返回值变化。这些都只是在按数据内容查找的基础上增加了序号,本质没变。

单链表的插入:

算法步骤:

1、首先找到a(i-1)的存储位置p

2、生成一个数据域为e的新结点s

3、插入新结点:

请添加图片描述

① 新结点的指针域指向结点a(i)

s -> next = p -> next

② 结点a(i-1)的指针域指向新结点

p -> next = s

思考:① ② 两步可以直接交换吗?

不可以,因为先将a(i-1)指向s会导致p->next不能达到指向a(i)的效果,如果硬是要这样做,要多用一个指针指向a(i)

请添加图片描述

关于代码第83行 p=L 而不是 p=L->next 的解释:因为删除的结点有可能是就是第一个结点,指向Lnext会导致第一个结点无法删除。

单链表的删除:

算法步骤:

1、首先找到 a(i) 的存储位置p,保存要删除的 a(i) 的值

2、令p->next 指向 a(i+1)

3、释放结点空间

请添加图片描述

请添加图片描述

建立单链表:

头插法:元素插在链表的前部

请添加图片描述

请添加图片描述

尾插法:元素插在链表的尾部

请添加图片描述

总结

总结1:常用指针操作

指向头结点:p=L

指向首元结点:s=L->next

指向下一个结点:p=p->next

总结2:各操作时间效率分析:

查找:O(n)

插入和删除:O(n)

头插法/尾插法:O(n)

循环链表

定义:

头尾相接的链表,即表中最后一个结点的指针指向头结点,整个链表形成一个环。

优点:从表中任何一个结点出发均可以找到其它结点。

循环条件:

循环链表中没有空指针,其终止条件判断为p或者p->next是否等于头指针

p!=NuLLp!=L
p->next!=NULLp->next!=L
单链表单循环链表

基本操作的实现

带尾指针循环链表的合并(将Tb合并在Ta之后)

请添加图片描述

算法步骤:

1、p存表头节点 p=Ta->next

2、Tb表头连接到Ta表尾 Ta->next=Tb->next->next

3、释放Tb表头结点 delete Tb->next

4、修改Tb尾指针 Tb->next=Ta

请添加图片描述

双向链表

定义:

在单链表的每个结点里面再增加一个指向其直接前驱的指针域prior,这样链表中就形成了有两个方向不同的链。

请添加图片描述

优点:方便查找前驱结点

双向链表结构定义:

请添加图片描述

对称性:p->prior->next = p = p->next->prior

基本操作实现

双向链表的插入:

请添加图片描述

请添加图片描述

双向链表的删除:

请添加图片描述

请添加图片描述

单链表、循环链表和双向链表的时间效率比较:

请添加图片描述

(1)查找表头几种链表时间复杂度相同。

(2)查找表尾结点使用循环链表时间复杂度小。

(3)查找前驱结点用双向循环链表时间复杂度最小。

顺序与链式比较

链式存储结构

优点:

① 结点空间可以动态申请和释放;

② 插入和删除操作时不需要移动大量元素;

缺点;

① 存储密度小,每个结点的指针域需额外占用存储空间;

② 是非随机存取结构,对任意一个结点的操作都要从头开始操作;

请添加图片描述

相关文章:

数据结构4——线性表3:线性表的链式结构

基本概念 ​ 链式存储结构用一组物理位置任意的存储单元来存放线性表的数据元素。 ​ 这组存储单元既可以是连续的又可以是不连续的甚至是零散分布在任意位置上的。所以链表中元素的逻辑次序和物理次序不一定相同。而正是因为这一点,所以我们要利用别的方法将这些…...

weblogic 忘记密码重置密码

解决:weblogic 忘记密码 weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码。 版本:WebLogic Server 11g 说明:%DOMAIN_HOME%:指WebLogic Server 域(…...

安卓开发之动态设置网络访问地址

之前开发程序联测测接口的时候,因为要和不同的后台人员调接口,所以经常要先把程序里的ip地址改成后台人员给我的。每次都要先修改ip地址,之后编译运行一下,才能测试。但要是换了个后台人员,或者同时和2个后台人员测接口…...

深度学习模型训练工作汇报(3.8)

进行数据的初始整理的准备 主要是进行伪序列字典的设置,以及训练数据集的准备。 期间需要的一些问题包括在读取文件信息的时候,需要跳过文件的第一行或者前两行,如果使用循环判断的话,会多进行n次的运算,这是不划算的…...

【ns-3】添加nr(5G-LENA)模块

文章目录前言1. 下载5G-LENA源代码2. 配置并重新构建ns-3项目参考文献前言 本篇以ns-3.37为例介绍如何在ns-3中添加nr(5G-LENA)模块 [1]。5G-LENA是一个由Mobile Networks group CTTC(Centre Tecnolgic de Telecomunicacions de Catalunya&a…...

(枚举)(模拟)(前缀和)(数组模拟哈希)(可二分)1236. 递增三元组

目录 题目链接 一些话 流程 套路 ac代码 题目链接 1236. 递增三元组 - AcWing题库 一些话 int f[N]; memset(f,0,sizeof f)影响不到f[N] 所以尽量不要对f[N]赋值,不要用f[N]操作 流程 //由三重暴力i,j,k因为三重暴力底下是分别用i和j,j和k作比较…...

mysql五种索引类型(实操版本)

为什么使用索引 最近学习了Mysql的索引,索引对于Mysql的高效运行是非常重要的,正确的使用索引可以大大的提高MySql的检索速度。通过索引可以大大的提升查询的速度。不过也会带来一些问题。比如会降低更新表的速度(因为不但要把保存数据还要保…...

微服务进阶之 SpringCloud Alibaba

文章目录微服务进阶🍓SpringCloud 有何劣势?🍓SpringCloud Alibaba 提供了什么?提示:以下是本篇文章正文内容,SpringCloud 系列学习将会持续更新 微服务进阶 🍓SpringCloud 有何劣势&#xff1…...

前端性能优化笔记2 第二章 度量

相关 Performance API 都在 window.performance 对象下 performance.now() 方法 精度精确到微妙获取的是把页面打开时间点作为基点的相对时间,不依赖操作系统的时间。 部分浏览器不支持 performance.now() 方法,可以用 Date.now() 模拟 performance.n…...

关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理

最近在写代码的时候,觉得每次new出来的对象都需要去delete好麻烦,于是直接把delete写到了析构函数中,在析构函数里面写了句delete this,结果调用析构函数的时候死循环了,不是很理解原因,于是去研究了一下。…...

一场以数字技术深度影响和改造传统实业的新风口,正在开启

当数字经济的浪潮开始上演,一场以数字技术深度影响和改造传统实业的新风口,正在开启。对于诸多在互联网时代看似业已走入死胡同的物种来讲,可以说是打开了新的天窗。对于金融科技来讲,同样如此。以往,谈及金融科技&…...

【LeetCode】13. 罗马数字转整数

题目链接:https://leetcode.cn/problems/roman-to-integer/ 📕题目要求: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 例如, 罗马数字 2 写做 II ,即…...

2023/3/8集合之TreeSet HashSet简介 不含代码

TreeSet : 底层是由TreeMap维护的 无序的,不可重的 底层结构 : 红黑树(平衡二叉树) 特点 : 查询效率高,默认升序排序引用场景 : 适合应用在存储多个单个值的数据的集合,去重的,自动升序排序的场景新增方法:新增了一些与比较大小相关的方法 遍历方式 1)foreach 2)iterator 1测试…...

【面试1v1实景模拟】面试中常见的Java关键字详解

笑小枫专属目录老面👴:Java中有哪些关键字老面👴:简单介绍一下 final 关键字老面👴:简单介绍一下 this、super 关键字老面👴:简单介绍一下 static 关键字老面👴&#xff…...

MySQL8.0.16存储过程比5.7.22性能大幅下降

MySQL8.0.16存储过程比5.7.22性能大幅下降 1、背景 从5.7.22迁移数据库到8.0.16,发现存储过程执行性能大幅下降。原来在5版本上执行只需要3-5秒,到8版本上居然要达到上万秒。 5版本: call Calculation_Week() OK 时间: 3.122s 8版本&#x…...

基于MATLAB的无线信道的传播与衰落(附完整代码与分析)

目录 一. 一般路径损耗模型 1. 1自由环境下路径损耗 1. 2 考虑实际情况 1.3 考虑阴影衰落 二. 代码仿真与理解 (1)函数文件 (2)函数文件 (3)主运行文件 三. 运行结果及理解 3.1 3.2 3.3 一. …...

SDX62如何查看Kernel版本和Operating System Version Patch Level

Kernel版本号方法一:adb shell登录,然后执行uname -a# uname -aLinux sdxlemur 5.4.180-perf #1 PREEMPT Fri Mar 3 04:24:42 UTC 2023 armv7l GNU/Linux方法二:内核源码查看,apps_proc/src/kernel/msm-5.4/Makefile 文件&#xf…...

001+limou+HTML——(1)HTML入门知识

000、本人编写前言 前言:本笔记来源于莫振杰的书《HTML、CSS、Javascript从零到一快速上手》,经过修改制成的自学笔记,本书很适合小白学习入门web的相关知识,你也可以先看看我从中学到了什么,再考虑是否去认真学习这本…...

使用Arduino Uno构建一个巡线机器人

使用Arduino Uno构建一个巡线机器人 原文 MX 巡线机器人(**LFR)**是一种简单的自主引导机器人,它遵循在地面上绘制的线来检测白色表面上的暗线或黑暗表面上的白线。在本教程中,使用 Arduino Uno 和一些易于访问的组件构建黑线跟…...

【C++】类和对象(收尾)

文章目录成员变量初始化问题初始化列表explicit关键字static成员特性:友元友元函数友元类内部类特性匿名对象成员变量初始化问题 在创建对象时,编译器通过调用构造函数,给了对象中各个成员变量一个合适的初始值。但是这并不能够称为对对象中成…...

Linux延迟操作

一、软中断Linux内核中定义了如下几种软中断:enum {HI_SOFTIRQ0,TIMER_SOFTIRQ,NET_TX_SOFTIRQ,NET_RX_SOFTIRQ,BLOCK_SOFTIRQ,IRQ_POLL_SOFTIRQ,TASKLET_SOFTIRQ,SCHED_SOFTIRQ,HRTIMER_SOFTIRQ,RCU_SOFTIRQ, /* Preferable RCU should always be the last soft…...

np.insert()函数用法

目录insert()函数定义程序举例说明行插入列插入多数值行插入完整的程序和显示结果:insert()函数定义 insert(arr, obj, values, axisNone) 参数说明: arr : 需要插入的数组,即Input array; obj:向数组中插入值的位置…...

学习笔记-架构的演进之容器的封装-3月day06

文章目录前言封装应用的Dockerwhy Docker not LXC?附前言 当文件系统、访问、资源都可以被隔离后,容器就已经具备它降生所需要的全部前置支撑条件了。为了降低普通用户综合使用 namespaces、cgroups 这些低级特性的门槛,2008 年 Linux Kernel 2.6.24 内…...

Gorm根据关系模型中的属性查询原模型数据

type ExamResult struct {gorm.ModelExamManagementID uintExamManagement ExamManagement json:"examManagement" // 一场考试,其中有试卷,有试题,有试题答案//MarkExamPaperRecord MarkExamPaperRecord //每一场考试对应的结…...

车载技术【USB接口】—Android配件协议AOA【AOA连接】

简述 AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议。该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设备控制领域提供了条件。介绍了Android系统下USB通信的两种模式,并给出了USB配件…...

SpringBoot的基本概念和使用

文章目录一、什么是SpringBoot二、Spring Boot优点三、Spring Boot项目创建四、Spring Boot 配置文件1. yml语法2.properties与yml关系3.多系统的配置五、Spring Boot日志文件1.日志对象2.日志级别日志级别的设置System.out.println VS 日志的两个致命缺点3.日志持久化4.更简单…...

基于计算机软件技术的化工设计特点

2.1 便利性将计算机软件技术应用于化工设计环节,最大的优点就在于提升了化工企业生产的便利性。化工设计作为化工生产的基础,在化工设计环节需要到有关化学反应和工艺流程设计等的相关问题,通过利用计算机软件技术可以为上述工作提供很好的辅…...

Nativefier把网页打包成exe

前要: 今天遇到一个需求,之前的应用都是用的h5挂载在企业微信的小应用,但是现在需要电脑运行的exe安装包! 所以需要用到nativefier导报工具:nativefier是一个使用electron将网页转换为app的插件,写这篇博客…...

STM32U5开发(1)----通过 USART1 发送数据

概述 通过 USART1 发送一些数据。 最近在弄ST和GD的课程,需要样片的可以加群申请:6_15061293。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-U575ZI开发板。 选择工程的时候,先不必选择加载了TrustZone。 样品申请 h…...

20230308 Apdl lsdyna两杆撞击案例学习笔记

本次模拟使用的是ANSYS 16.0 一、设置Element type 首先打开APDL界面 添加element type 在LS-DYNA Explicit选择条件下,选择3D solid 164 二、设置材料类型 选择material models 选择Elastic-Isotropic-输入 Density:密度 EX:杨氏模量 NUXY:泊松比 三、几何模型建…...