【链表——数据结构】

文章目录

    • 1.单链表
        • 1.定义
        • 2.基本操作
          • 2.1.不带头结点
          • 2.2后插
          • 2.3前插
          • 2.4删除
          • 2.5按位查找
          • 2.6按值查找
          • 2.7求单链表长度
          • 2.8 建表
    • 2.双链表
        • 1.初始化
        • 2.插入(后插)
        • 3.删除(后删)
        • 4.遍历
    • 3.循环链表
        • 1.循环单链表
        • 2.循环双链表
        • 3.代码问题
    • 4.静态链表
        • 1.简述基本操作的实现
        • 1.初始化
        • 3.删除某个结点
        • 4.优缺点
        • 5.适用场景
    • 5.线性表
        • 1.从无到有,从有到无
        • 2.增 删(改)
        • 3.(“改”之前也要“查" )
        • 4.判空、判长、打印输出(还可以自己根据实际需求增加其它基本操作)
    • 6.顺序表
        • 1.静态分配
        • 2.动态分配
        • 3. 特点
        • 4.插入
        • 5.删除
        • 6.代码要点
        • 7.按位查找
        • 8.按值查找

1.单链表

1.定义

用链式存储”(存储结构实现了 “线性结构" (逻辑结构))
一个结点存储-个数据元素
各结点间的先后关系用一个指针表示
单链表:表尾结点的next指针指向NULL
单链表:从一个结点出发只能找到后续的各个结点
在这里插入图片描述
两种实现
1.不带头结点
空表判断: L= =NULL。写代码不方便
2.带头结点
空表判断:L-> next= =NULL。写代码更方便

2.基本操作

1.带头结点
头结点可以看作“第0个”结点
找到第i-1个结点,将新结点插入其后
在这里插入图片描述

2.1.不带头结点

不存在“第0个” 结点,因此i=1时需要特殊处理
找到第i-1个结点,将新结点插入其后
在这里插入图片描述
如果不带头结点,则插入、删除第1个元素时,需要更改头指针L
在这里插入图片描述

2.2后插

在这里插入图片描述

2.3前插

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4删除

头结点可以看作“第0个”结点
找到第i-1个结点,将其指针指向第i+ 1个结点,并释放第i个结点
在这里插入图片描述
时间复杂度O(n)

有坑:指定结点是最后一-个结点时,需要特殊处理
在这里插入图片描述

2.5按位查找

单链表不具备"随机访问"的特性,只能依次扫描
在这里插入图片描述
平均查找长度O(n)

2.6按值查找

在这里插入图片描述
平均查找长度O(n)

2.7求单链表长度

在这里插入图片描述
时间复杂度O(n)

2.8 建表

1.尾插法
初始化单链表
设置变量length记录链表长度

While循环{
每次取一个数据元素e;
ListInsert (L, length+ 1, e)插到尾部;
length+ +;
}

在这里插入图片描述

2.头插法
头插法建立单链表: .
初始化单链表

While循环{
每次取一个数据元素e;
InsertNextNode (L, e);
}

2.双链表

1.初始化

头结点的prior,next都指向NULL

2.插入(后插)

注意新插入结点、前驱节点、后继结点的指针修改
边界情况:新插入结点在最后一个位置,需特殊处理

3.删除(后删)

注意删除结点的前驱结点、后继结点的指针修改
边界情况:如果被删除结点是最后-个数据结点,需特殊处理

4.遍历

从一个给定结点开始,后向遍历、前向遍历的实现(循环终止条件)
链表不具备随机存取特性,查找操作只能通过顺序遍历实现

3.循环链表

1.循环单链表

空表在这里插入图片描述
非空表
在这里插入图片描述

2.循环双链表

空表
在这里插入图片描述
非空表
在这里插入图片描述

3.代码问题

判空
在这里插入图片描述
如何判断结点p是否表尾/表头结点
在这里插入图片描述
如何在表头、表中、表尾插入/删除一个结点
在这里插入图片描述
在这里插入图片描述

4.静态链表

用数组的方式实现的链表
分配一整片连续的内存空间,各个结点集中安置
每个数据元素4B,每个游标4B (每个结点共8B)设起始地址为addr
在这里插入图片描述
如何定义一个静态链表
在这里插入图片描述

1.简述基本操作的实现
1.初始化

把a[0]的next设为-1
把其他结点的next设为一个特殊值用来表示结点空闲

查找从头 结点出发挨个往后遍历结点

####2.插入位序为i的结点
①找到一个空的结点,存入数据元素
②从头结点出发找到位序为i-1的结点
③修改新结点的next
④修改i-1号结点的next

3.删除某个结点

①从头结点出发找到前驱结点
②修改前驱结点的游
③被删除结点next设为-2 .

4.优缺点

优点:增、删操作不需要大量移动元素
缺点:不能随机存取,只能从头结点开始依次往后查找;容量固定不可变

5.适用场景

①不支持指针的低级语言.
②数据元素数量固定不变的场景(如操作系统的文件分配表FAT)

5.线性表

值得注意的特性
数据元素同类型、有限、有序

重要的术语
n为表长、当n=0时为空表
表头a、 表尾a——注意: 位序从1开始数组下标从0开始
前驱、后继——除第- -个元素外,每个元素有且仅有一一个直接前驱;除最后-个元素外,每个元素有且仅有一个直接后继
数据元素的位序a; (从1开始)

**“逻辑结构”**一a1 →a2→a3→a4→a5

基本操作

1.从无到有,从有到无

InitList(&L):初始化表。构造-个空的线性表L, 分配内存空间。
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。

2.增 删(改)

ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e.
ListDelete(&L,i,&e):删除操作。删除表l中第i个位置的元素,并用e返回删除元素的值。

3.(“改”之前也要“查" )

LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素
GetElem(Li):按位查找操作。获取表L中第i个位置的元素的值。

4.判空、判长、打印输出(还可以自己根据实际需求增加其它基本操作)

Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。
PrintList(L):输出操作。按前后顺序输出线性表l的所有元素值。
Empty(L):判空操作。若L为空表,则返回true,否则返回false.

在这里插入图片描述

6.顺序表

定义(如何用代码实现)
存储结构一逻辑 上相邻的数据元素物理上也相邻
使用“静态数组"实现

实现方式

1.静态分配

给各个数据元素分配连续的存储空间,大小为
大小一旦确定就无法改变

2.动态分配

使用“动态数组"实现
L.data= (Elemtype *) malloc (sizeof(ElemType)*size);
顺序表存满时,可再用malloc动态拓展顺序表的最大容量
需要将数据元素复制到新的存储区域,并用free函数释放原区域
缺点:时间开销大

3. 特点

①随机访问,即可以在0(1)时间内找到第i个元素。
②存储密度高, 每个节点只存储数据元素
③拓展容量不方便(即便采用动态分配的方式实现,拓展长度的时间复杂度也比
较高)
④插入、删除操作不方便,需要移动大量元素

基本操作

4.插入

Listinser(&Li,e)一将元素e插入到 的第i个位置
插入位置之后的元素都要后移
时间复杂度
最好0(1)、最坏O(n)、 平均O(n)

5.删除

ListDelete(&Li,&e)
将L的第i个元素删除,并用e返回
删除位置之后的元素都要前移
时间复杂度
最好0(1)、最坏O(n). ‘平均O(n)

6.代码要点

代码中注意位序和数组1下表的区别
算法要有健壮性,注意判断i和注意合法性
移动元素时,从靠前的元素开始?还是从表尾元素开始?
分析代码,理解为什么有的参数需要加“&"引用

7.按位查找

GetElem(Li)
获取表L中第i个位置的元素的值
用数组小标可得到第i个元素Ldata[i-1]
时间复杂度
最好/最坏/平均时间复杂度都是0(1)

8.按值查找

LocateElem(,e)
在顺序表L中查找第一个元素值等于e的元素, 并返回其位序
从第一个元素开始依次往后检索
时间复杂度
最好O(1)——目标元素在第一个位置
最坏O(n)——目标元素在最后一个人位置
平均O(n)——目标元素在每个位置的概率相同
在这里插入图片描述
表长难以预估、经常要增加/删除元素——链表
表长可预估、查询(搜索)操作较多——顺序表

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端---Bootstrap---的下载和使用

目录 Bootstrap的下载 网页链接: 下载步骤: Bootstrap的使用 引用步骤: Bootstrap常用: Bootstrap-栅格系统 Bootstrap-组件 Bootstrap 是由 Twiter 公司开发维护的前端 U框架,它提供了大量编写好的 CSS 样式,允许开发者结合一定 HTML结构及JavaS…

二维码门楼牌管理应用平台建设:档案管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的构建背景二、九小场所档案管理的重要性三、二维码门楼牌管理应用平台在九小场所档案管理中的应用四、二维码门楼牌管理应用平台的优势与挑战五、结语 前言 随着信息技术的飞速发展,二维码门楼牌管理应用平台的建设已成…

《Fundamentals of Power Electronics》——三端电池的旋转、负载差分连接

以下是关于三端电池的旋转的相关知识点: Buck电路、Boost电路和Buck-Boost电路均包含一个与单刀单掷开关相连的电感。如下图所示。 将上图中的电感和开关网络视为一个标有a,b,c三端的基础电池。该电池在电源和负载之间有三种不同的连接方式。a-A b-B c-C连接方式组…

BERT一个蛋白质-季军-英特尔创新大师杯冷冻电镜蛋白质结构建模大赛-paipai

关联比赛: “创新大师杯”冷冻电镜蛋白质结构建模大赛 解决方案 团队介绍 paipai队、取自 PAIN AI,核心成员如我本人IvanaXu(IvanaXu GitHub),从事于金融科技业,面向银行信用贷款的风控、运营场景。但我们团队先后打过很多比赛&#xf…

文件Tools工具 支持WORD/PDF/EXCEL/PDF等格式的转换软件

文件Tools工具 支持WORD/PDF/Excel/PDF等格式的转换软件 支持功能 Word转PDFWORD转EXCELWORD转EPUBPDF转WORDPDF转EXCELPDF转PPTPDF版本转换EXCEL转PDFEXCEL转WORDPDF转EXCELEPUB转WORDEPUB转PDFHTML转PDF(需配置chromium)点击查看配置教程简易二维码生…

TablePlus for Mac/Win:开启高效数据开发新纪元

在当今数字化时代,数据的重要性日益凸显。无论是企业还是个人,都需要一款强大而实用的本地原生数据开发软件来提升工作效率。而 TablePlus for Mac/Win 正是这样一款卓越的工具,它为用户带来了全新的体验,让数据开发变得更加轻松、…

Matlab实现CNN-BiLSTM模型,对一维时序信号进行分类

1、利用Matlab2021b训练CNN-BiLSTM模型,对采集的一维时序信号进行分类二分类或多分类 2、CNN-BiLSTM时序信号多分类执行结果截图 训练进度: 网络分析: 指标变化趋势: 代码下载方式(代码含数据集与模型构建&#xff0…

go引入自建包名报错 package XXX is not in std和goland设置GO111MODULE提示冲突

首先在引入自建包的时候报错 查找网上的解决方法: 1、goland取消勾选Enable Go modules integration 2、set GO111MODULEoff 但是都没解决,而且更奇怪的是,我在cmd里面查看go env就显示set GO111MODULEoff 但是在goland里面的终端输入 go…

面试大厂,面试官问:为什么要使用盒模型?

1. 基础知识 什么是 CSS 盒模型 CSS 盒模型描述了页面中元素的布局和空间分配方式。每个元素都被看作是一个盒子,这个“盒子”由 4 个部分组成: 内容(Content)、内边距(Padding)、边框(Borde…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5, 汇编 led.s,第一次点亮LED灯

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Llama 3 安装使用方法

Llama3简介: llama3是一种自回归语言模型,采用了transformer架构,目前开源了8b和70b参数的预训练和指令微调模型,400b正在训练中,性能非常强悍,并且在15万亿个标记的公开数据进行了预训练,比ll…

读天才与算法:人脑与AI的数学思维笔记13_Coq证明助手

1. 计算机 1.1. 对于计算机来说,它就很擅长处理这种重复而机械且计算量庞大的任务 1.1.1. 在速度与准确性等方面,计算机是远超过手工计算的 1.2. 计算机只能执行指令,并无自主创造力 1.2.1. 想…

JavaScript 的基本术语大全

文章目录 1、概述2、基本术语2.1、有效负载 (Payload)2.2、ReadableStream2.3、模块系统2.4、DOM (Document Object Model)2.5、事件 (Events)2.6、活动委托 (Event Delegation)2.7、内容安全策略 (CSP)2.8、渐进增强和优雅降级2.9、JSON (JavaScript Object Notation)2.10、AJ…

绝地求生:竞技比赛RP占比改动详解

大好,我闲游盒! 在上周29.1版本更新后,官方也发布了关于竞技比赛:RP的改动公告,这里就为大家简单讲解一下具体改动的地方~ 官方希望能够通过优化让RP、段位和竞技比赛更能准确的反馈出大家自身的实力。 第一项改动是在…

02.Kafka部署安装

1 Linux 安装 Kafka 1.1 安装前的环境准备 由于 Kafka 是用 Scala 语言开发的,运行在 JVM 上,因此在安装Kafka之前需要先安装JDK。 yum install java-1.8.0-openjdk* -y kafka 依赖 zookeeper,所以需要先安装 zookeeper。 wget https://ar…

5G图标显示分析

1、问题现象 MTK平台项目中出现一个5G图标显示问题,注册5G时,拨打电话,对比机图标显示回落到4G,测试机一直显示5G。 2、原因分析 2.1、NSA显示规则 根据GSMA协议,NSA架构下5G图标显示有如下4种. 2.2、Android中显示5G…

基于Springboot的甘肃旅游服务平台(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的甘肃旅游服务平台(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

idea的插件,反编译整个jar包

idea的插件,反编译整个jar包 1.安装插件1.1找到插件1.2 搜索插件 2.反编译整个jar包2.1 复制jar包到工件目录下:2.2 选中jar包,点出右键 3.不用插件,手动查看某一个java类3.1 选中jar包,点出右键 1.安装插件 1.1找到插…

日本宇宙航空研究“Int-Ball2”自由飞行相机机器人采用的Epson IMU

IMU有助于飞行的稳定控制和电池充电的自动对接- 精工爱普生公司(TSE:6724,“Epson”)很高兴地宣布,日本宇宙航空研究开发机构(JAXA)选择了爱普生M-G370系列的惯性测量单元(IMU)&…

Spring Security介绍(三)过滤器(2)自定义

除了使用security自带的过滤器链,我们还可以自定义过滤器拦截器。 下面看下自定义的和security自带的执行顺序。 一、总结 1、自定义过滤器: 一般自定义fliter都是: import lombok.extern.slf4j.Slf4j; import org.springframework.ster…