21-22 - 线性表的链式存储结构 单链表的具体实现

server/2024/9/18 21:11:48/ 标签: 单链表, 线性表, 链式存储结构, 数据结构

---- 整理自狄泰软件唐佐林老师课程

文章目录

1. 线性表链式存储结构

  • 顺序存储结构线性表的问题:插入和删除需要移动大量的元素

1.1 定义

为了表示每个数据元素与其直接后继元素之间的逻辑关系,数据元素除了存储自身的信息外,还需要存储其直接后继的信息。

在这里插入图片描述

1.2 逻辑结构

  • 基于链式存储结构线性表中,每个结点都包含数据域和指针域
    • 数据域:存储数据元素本身
    • 指针域:存储相邻结点的地址

在这里插入图片描述

1.3 专业术语的统一

2. 链表的基本概念

  • 头结点:链表中的辅助结点,包含指向第一个数据元素的指针
  • 数据结点:链表中代表数据元素的结点,表现形式为:(数据元素,地址)
  • 尾结点:链表中的最后一个数据结点,包含的地址信息为空

2.1 单链表中的结点定义

在这里插入图片描述

2.2 单链表中的内部结构

  • 头结点在单链表中的意义是:辅助数据元素的定位,方便插入和删除;因此,头结点不存储实际的数据元素。

在这里插入图片描述

2.3 在目标位置处插入数据元素

  1. 从头结点开始,通过 current 指针定位到目标位置
  2. 从堆空间申请新的 Node 结点
  3. 执行操作:
node->value = e;
node->next = current->next;
current->next = node;

2.4 在目标位置处删除数据元素

  1. 从头结点开始,通过 current 指针定位到目标位置
  2. 使用 toDel 指针指向需要删除的结点
  3. 执行操作:
toDel = current->next;
current->next = toDel->next;
delete toDel;

3. 链式存储结构线性表的实现

在这里插入图片描述

3.1 设计要点

  1. 类模板,通过头结点访问后继结点
  2. 定义内部结点类型 Node,用于描述数据域和指针域
  3. 实现线性表的关键操作(增、删、查,等)
template<typename T>
class LinkList : public List<T>
{
protected:struct Node : public Object {T value;Node* next;};Node m_header;int m_length;
public:LinkList();// ...
};

3.2 实现

单链表的具体实现】

3.3 问题

  • 头结点是否存在隐患?代码如何优化?

在这里插入图片描述

#include <iostream>
#include "LinkList.h"using namespace DTLib;
using namespace std;class Test
{
public:Test(){throw 0;}
};int main()
{LinkList<Test> list;cout << "test" << endl;return 0;
}

在这里插入图片描述

  • LinkList 成员 m_header,在构造 LinkList 对象的时候,会构造 Node 对象,进一步构造 T 对象,和用户定义的对象类型有关。

3.4 优化

单链表优化】

4. 小结

  • 通过类模板实现链表,包含头结点成员和长度成员
  • 定义结点类型,并通过堆中的结点对象构成链式存储
  • 为了避免构造错误的隐患,头结点类型需要重定义

http://www.ppmy.cn/server/14893.html

相关文章

使用Perf诊断PostgreSQL性能问题

1 编译参数 使用perf获取完整的堆栈信息需要下面几个编译参数&#xff1a; -O0&#xff1a;编译器不做优化-ggdb3&#xff1a;增加了为GDB优化的调试信息&#xff0c;级别是3-g3&#xff1a;增加了调试信息&#xff0c;级别是3-fno-omit-frame-pointer&#xff1a;保留完成的…

mybatis实现批量更新修改(性能极佳)

mybatis实现批量修改&#xff0c;性能最好 根据我个人的测试&#xff0c;mybatis实现批量修改的方式有很多&#xff0c;但从既方便又快捷的角度考虑&#xff0c;发现使用下面的写法性能最好&#xff0c;插入大批量的数据速度极快&#xff0c;虽然写起来复杂&#xff0c;数量多…

数字零售力航母-看微软如何重塑媒体

数字零售力航母-看微软如何重塑媒体 - 从2024全美广播协会&#xff08;National Association of Broadcaster)​​​​​​​展会看微软如何整合营销媒体AI技术和AI平台公司 2024年&#xff0c;微软公司联合英伟达总司&#xff0c;赞助全美广播协会展会。本次展会微软通过搭建…

惠海 H5112B 洗墙灯24V36V48V60V72V100V1.2ALED降压恒流芯片IC PWM无频闪调光

洗墙灯24V36V48V60V72V100V1.2A LED降压恒流芯片PWM无频闪调光是一种特殊的电子元件&#xff0c;专为洗墙灯等LED照明设备设计。以下是关于这种芯片的主要特点和功能&#xff1a; 降压恒流功能&#xff1a;该芯片能够将较高的输入电压&#xff08;如24V、36V、48V等&#xff0…

MMSeg搭建自己的网络

配置结构 首先&#xff0c;我们知道MMSeg矿机的配置文件很多&#xff0c;主要结构如下图所示。 在configs/_base_下是模型配置、数据集配置、以及一些其他的常规配置和运行配置&#xff0c;四类。 configs/all_config目录下存放&#xff0c;即是将四种配置聚合在一起的一个总…

异常处理 android.os.NetworkOnMainThreadException

android.os.NetworkOnMainThreadException 是一个在 Android 开发中常见的异常&#xff0c;它发生在你的应用尝试在主线程上进行网络操作时。从 Android 6.0 (API level 23) 开始&#xff0c;默认情况下&#xff0c;应用程序的主线程&#xff08;UI线程&#xff09;不允许执行网…

【第3节】“茴香豆“:搭建你的 RAG 智能助理

目录 1 基础知识1.1.RAG技术的概述1.2 RAG的基本结构有哪些呢&#xff1f;1.3 RAG 工作原理&#xff1a;1.4 向量数据库(Vector-DB )&#xff1a;1.5 RAG常见优化方法1.6RAG技术vs微调技术 2、茴香豆介绍2.1应用场景2.2 场景难点2.3 茴香豆的构建&#xff1a; 3 论文快读 1 基础…

文件上传技术总结

文件上传技术总结 XMindChEPTpEere4pPp3.8h2试用要式Sa44十年.听元汽狂节产方生左车析上传ItaorFSs改文件解行方式方利!xP打统学/麻x绿部成I足让tAD.coENLRCoiD中国汽的折时语言特性系统特性中间件化析漏逅CVE-2015-444.ter1.jpo1寄户端文件上传漏洞绕过MIME过3083省rd0文大小…

WEB攻防-.NET特性常见漏洞

目录 前置知识&#xff1a; DLL文件 .NET和DLL文件 C#和DLL文件 关系总结 .NET 配置调试-信息泄露 .NET 源码反编译-DLL 反编译与未授权访问 编译DLL文件 反编译DLL文件 注意事项 案例&#xff1a; 验证代码文件有没有可以绕过&#xff08;Cookie&Session&…

Node.js和cnpm环境搭建

Node.js和cnpm环境搭建 一、nodejs安装 1.1 傻瓜式一直下一步即可&#xff0c;不需要额外进行任何配置 nodejs下载链接&#xff0c;提取码&#xff1a;5555 1.2 查看是否安装成功 cmd进入命令行界面 输入node -v 显示node版本&#xff0c;显示则安装成功 1.3 改变全局模块路…

jetcache fastjson 泛型复杂对象JSON序列 ,反序列化

Jetcache fastjson 泛型复杂对象JSON序列 ,反序列化 默认的FastJson2 序列化存在问题增强FastJson 支持Encode 编码器Decode 解码器 默认的FastJson2 序列化存在问题 默认的序列化不能转换List 中的泛型数据类型, 从缓存拿取的list集合对象数据全部都转换成了JSONObject 增强F…

Faiss:高效相似性搜索与聚类的利器

Faiss 是一个针对大规模向量集合的相似性搜索库&#xff0c;由 Facebook AI Research 开发。它提供了一系列高效的算法和数据结构&#xff0c;用于加速向量之间的相似性搜索&#xff0c;特别是在大规模数据集上。本文将介绍 Faiss 的原理、核心功能以及如何在实际项目中使用它。…

阿里云Docker镜像加速器

阿里云Docker镜像加速器详解&#xff1a; Docker 镜像 仓库 容器介绍 以及镜像仓库详解 访问 https://www.aliyun.com/ 搜索 “容器镜像服务”

K8s: ConfigMap 与 Secret 的配置管理

配置管理 研究的是配置和应用如何分离如何把跟应用无关的配置给它抽离出来&#xff0c;让它在不同的环境中运行 ConfigMap 配置 ConfigMap API对象&#xff0c;它用于把环境变量和容器镜像进行解耦它不提供加密的功能&#xff0c;如果要存机密数据请用secret场景 比如在连接数…

Redis 安装及配置教程(Windows)【安装】

文章目录 一、简介一、 下载1. GitHub 下载2. 其它渠道 二、 安装1. ZIP2. MSI 软件 / 环境安装及配置目录 一、简介 Redis 官网地址&#xff1a;https://redis.io/   Redis 源码地址&#xff1a;https://github.com/redis/redis   Redis 官网安装地址&#xff08;无Windo…

[羊城杯 2020]EasySer ---不会编程的崽

稍微带点反序列化&#xff0c;稍微。 常规扫描robots.txt,给出提示star1.php。 很明显的ssrf嘛。直接读 star1.php?pathhttp://127.0.0.1/star1.php <?php error_reporting(0); if ( $_SERVER[REMOTE_ADDR] "127.0.0.1" ) {highlight_file(__FILE__); } $f…

Flutter 扒一扒图片缓存框架cached_network_image

我分析图片加载流程&#xff0c;不是直接从Image这个类开始分析的。我现拿 cached_network_image ^3.2.3这个图片缓存框架进行解析。其实cached_network_image这个框架本质上还是处理Image类的&#xff0c;往下看就知道了&#xff0c;只是cached_network_image这个框架对他进行…

WordPress SQLite Docker 镜像封装细节

为了让大家用的放心&#xff0c;同时解答 GitHub 社区中的疑问。这篇文章聊聊上一篇文章的 Docker 容器封装细节。 写在前面 在前一篇文章《WordPress 告别 MySQL&#xff1a;Docker SQLite WordPress》中&#xff0c;如果你跟着文章实践&#xff0c;大概三分钟就能够启动一个…

CentOS7配置NFS文件共享

环境准备 准备3个linux服务器&#xff1a; 192.168.137.120&#xff08;nfs server端&#xff09; 192.168.137.121 192.168.137.122 安装nfs-utils工具 # 在3个节点上都执行 yum install nfs-utils -y服务端配置 # 在120上执行 systemctl enable nfs-server systemctl sta…

硬件排坑笔记

硬件排坑笔记 1.MOS管悬空 首先给出电路图&#xff0c;如下图所示&#xff1a; 问题&#xff1a; 一开始调试板子时&#xff0c;准备逐级调试Boost和Invert&#xff0c;因此直接把后级的驱动小板拔了&#xff0c;这样的话后级的Mos就悬空了。 上电测试时&#xff0c;发现上…