C32.【C++ Cont】静态实现双向链表及STL库的list

目录

1.知识回顾

2.静态实现演示图

3.静态实现代码

1.初始双向链表

2.头插

3.遍历链表

4.查找某个值

4.任意位置之后插入元素

 5.任意位置之前插入元素

 6.删除任意位置的元素

4.STL库的list


1.知识回顾

96.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删
97.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数

上述文章均为动态实现双向链表,由于竞赛中追求运行速度快,因此不会动态实现双向链表,本文介绍静态实现双向链表

2.静态实现演示图

由于每一个结点要存储三个信息,因此静态实现使用三个数组:数值数组val,前驱数组prev,后继数组next,三个数组中同一个下标位置的元素打包成一个节点,如下图所框的(head指向头节点)

注:这里实现的双向链表为不循环的

将上方图改成逻辑结构再画图

3.静态实现代码

1.初始双向链表

	const int N=1e5+10;//一开始prev数组和next数组元素值都为-1(无效下标),为空链表int prev[N]=-1; int val[N];int next[N]=-1;//初始情况head和id都指向哨兵位结点 int head=0;int id=0;

2.头插

先保存新数据的值,再修改next和prev数组

只要①指针最后修改即可

	void push_front(int data){val[++id]=data;next[id]=next[head];prev[next[head]]=id;prev[id]=head;next[head]=id;//确保next[head]最后被修改 }

3.遍历链表

只需要看next数组即可遍历

	void print(){for (int i=next[head];i!=-1;i=next[i]){cout<<val[i]<<" ";}	} 

4.查找某个值

和打印逻辑一样,按链表的方式遍历,注意不能只查val数组,有些元素被"删除"了(即按链表的方式查不到),但仍然存在于val数组中

只需要看next数组,查找到data在链表中第一次出现的位置 ,此方法时间复杂度为O(N)

	void find(int data){for (int i=next[head];i!=-1;i=next[i]){if (val[i]==data){cout<<data<<"的下标为"<<i;return; }}cout<<"未找到";}

如果使用标记数组mp优化(哈希表),直接return mp[x],时间复杂度O(1),但此方法有局限

4.任意位置之后插入元素

设在任意位置pos之后插入元素data,本质上和头插操作一样.,只要最后修改pos的后继指针即可

	void insert_after(int pos,int data){val[++id]=data;next[id]=next[pos];prev[next[pos]]=id;prev[id]=pos;next[pos]=id;//确保next[pos]最后被修改 }

 5.任意位置之前插入元素

设在任意位置pos之前插入元素data,本质上和头插操作一样.,只要最后修改pos的前驱指针即可

	void insert_before(int pos,int data){val[++id]=data;next[prev[pos]]=id;prev[id]=prev[pos];next[id]]=pos;prev[pos]=id;//确保prev[pos]最后被修改 }

 6.删除任意位置的元素

修改两个指针即可

	void erase(int pos){prev[next[pos]]=prev[pos];next[prev[pos]]=next[pos];}

4.STL库的list

提醒:list 的底层就是动态实现的双向循环链表,增删会涉及new和delete,执行速度慢,竞赛中不建议使用

初始化list: list<任意数据类型> 名称

list<int> l;

头插: l.push_front 尾插: l.push_back 头删: l.pop_front 尾删: l.pop_back

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

退格法记单词(类似甘特图)

退格法记单词&#xff0c;根据记忆次数或熟练程度退格&#xff0c;以示区分&#xff0c;该方法用于短时高频大量记单词&#xff1a; explosion爆炸&#xff0c;激增 mosquito蚊子granary粮仓&#xff0c;谷仓 offhand漫不经心的 transient短暂的slob懒惰而邋遢的…

MySQL三大日志——binlog、redoLog、undoLog详解

日志是mysql数据库的重要组成部分&#xff0c;记录着数据库运行期间各种状态信息&#xff0c;能帮助我们进行很多容错及分析工作&#xff0c;其中有三大日志与我们这些开发者息息相关&#xff0c;本文将介绍binlog、redoLog、undoLog三种日志&#xff1a; 1. redoLog 1.1 为什么…

995. K连续位的最小翻转次数

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法代码逻辑回顾示例运行过程初始状态&#xff1a;遍历过程&#xff1a; 最终结果总结 四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 就是滑动窗口一个一个遍历&#xff0c;遇到情况就翻转…

部署LLM模型到云端

文章目录 1 ECS 云服务器部署2 函数计算FC3 人工智能平台PAI-EAS4 大模型服务平台百炼压测实验结果显示,由于本地设备算力有限,本地部署的模型服务无法满足低延迟和高并发的需求。针对这类线上业务,可以考虑云端部署。 下面先来看看本地部署和云端部署的特点对比。 由上可…

【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表

目录结构如下&#xff1a; . ├── static │ ├── css │ │ └── styles.css │ └── js │ └── scripts.js ├── templates │ ├── base.html │ ├── case_converter.html │ ├── index.html │ └── word_finder.html ├── app.py ├── tree.py…

intra-mart实现简易登录页面笔记

一、前言 最近在学习intra-mart框架&#xff0c;在此总结下笔记。 intra-mart是一个前后端不分离的框架&#xff0c;开发时主要用的就是xml、html、js这几个文件&#xff1b; xml文件当做配置文件&#xff0c;html当做前端页面文件&#xff0c;js当做后端文件&#xff08;js里…

0008—常量和变量

目录 一、变量 1.1 定义变量的方法 1.2 变量的分类 1.3 使用变量 1.4 变量的作用域 1.5 变量的生命周期 二、常量 2.1 字面常量 2.2 const修饰的常变量 2.3 define定义的标识符常量 2.4 枚举常量 三、练习 一、变量 生活中的有些值是不变的&#xff08;比如&#…

【Vue】在Vue3中使用Echarts的示例 两种方法

文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来&#xff0c;属于正常现象&#xff0c;多进几次就行 开始使用前&#xff0c;记得先…

[Deepseek-自定义Ollama 安装路径+lmStudio 简易安装]

ollama 先下载 https://ollama.org.cn/download 使用 发现报错 检查路径 自己的路径! 再用 .\OllamaSetup.exe /DIRE:\MySoftware\Ollama 删除掉 多余模型 ollama delete <model_name> 例如 ollama delete deepseek-r1:1.5b 下载 ollama run deepseek-r1:1.5b…

Linux 内核模块 | 加载 / 添加 / 删除 / 优先级

注&#xff1a;本文为 “Linux 内核模块加载 / 添加 / 删除 / 优先级” 相关文章合辑。 机翻&#xff0c;未校。 未整理去重。 How Linux Kernel Boots? Linux 内核如何启动&#xff1f; Last Updated: 26 Apr, 2023 Many processes are running in the background when …

鸿蒙UI(ArkUI-方舟UI框架)- 使用文本

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文本使用 文本显示 (Text/Span) Text是文本组件&#xff0c;通常用于展示用户视图&#xff0c;如显示文章的文字内容。Span则用于呈现显示行内文本。 创建文本 string字符串 Text("我是一段文本"…

ubuntu20使用tigervnc远程桌面配置记录

一、安装tigervnc sudo apt install tigervnc-common sudo apt install tigervnc-standalone-server二、增加配置文件 安装完后新增配置文件&#xff1a;vim ~/.vnc/xstartup #!/bin/sh #Uncomment the following two lines for normal desktop: #unset SESSION_MANAGER #ex…

如何使用el-table的多选框

对el-table再次封装&#xff0c;使得功能更加强大&#xff01; 本人在使用el-table时&#xff0c;因为用到分页&#xff0c;导致上一页勾选的数据在再次返回时&#xff0c;没有选中&#xff0c;故在原有el-table组件的基础之上再次进行了封装。 1.首先让某些不需要勾选的列表进…

【银河麒麟高级服务器操作系统】系统日志Call trace现象分析及处理全流程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 服务器环境以及配置 系统环境 物理机/虚拟机/云…

杭州某小厂面试

问的都是基础知识&#xff0c;主要是三个部分&#xff1a;计网&#xff0c;数据库&#xff0c;java。计网答得挺好&#xff0c;数据答得一般&#xff0c;Java答得一坨。 目录 1.TCP/IP协议的5层模型 2.3次握手和4次挥手 3.操作系统中的进程和线程的区别 4.lunix top 命令看…

k8s网络插件及基础命令

一、k8s的cni网络插件 1.k8s的内部网络模式 pod内的容器与容器之间的通信。一个节点上的pod之间的通信&#xff0c;docker0网桥直接通信。不同节点上的pod之间的通信&#xff1a;通过物理网卡的ip地址和其他节点上的物理网卡的设备进行通信&#xff0c;然后把流量转发到指定的…

Zookeeper是如何解决脑裂问题的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何解决脑裂问题的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何解决脑裂问题的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过多种机制来解决脑裂&…

判断您的Mac当前使用的是Zsh还是Bash:echo $SHELL、echo $0

要判断您的Mac当前使用的是Zsh还是Bash&#xff0c;可以使用以下方法&#xff1a; 查看默认Shell: 打开“终端”应用程序&#xff0c;然后输入以下命令&#xff1a; echo $SHELL这将显示当前默认使用的Shell。例如&#xff0c;如果输出是/bin/zsh&#xff0c;则说明您使用的是Z…

web直播弹幕抓取分析 signature

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言 最近遇到太多难点了卡了很久&am…

使用Deepseek搭建本地知识库-Cherry Studio

Cherry Studio 支持多模型服务的 Windows/macOS GPT 客户端 GITHUB&#xff1a;CherryHQ/cherry-studio CSDN资源&#xff1a;cherry studio Cherry Studio 是一个支持多模型服务的桌面客户端&#xff0c;为专业用户而打造&#xff0c;内置 30 多个行业的智能助手&#xff0c…