Acwing数据结构:单链表

news2024/9/21 19:52:52

单链表

主要思想:使用数组实现链表(而不用结构体,结构体代码更长,后续图论也是基于数组实现),即静态链表。因为动态链表使用new申请空间需要较多的时间,而算法要求的是以较少的时间完成任务。

  • 单链表:最主要用单链表写邻接表,用邻接表存储图或者树;
  • 双链表:优化某些问题

单链表:头指针head指向第一个结点,初始为-1.数组e[]存储结点的值,数组ne[]存储对应结点的下一个结点的下标,形成一个链条。本质是用数组下标来操作对应结点。

需要背过的板子:

const int N=100010;

//head表示头节点的下标
//e[i]表示节点i的值
//ne[i]表示节点i的next指针是多少
//idx存储当前已经用到了哪个点
int head,e[N],ne[N],idx=0;


void init(){
    head=-1;//空
    idx=0;//当前可以从0号点开始用
}

//在链表头插入一个x
void add_to_head(int x){
    e[idx] = x;//存值
    ne[idx] = head;//next指向head指的
    head = idx;//head指向idx的位置
    idx ++;//idx后移
}

//将x插入到下标为k的点的后面
void add(int k,int x){
    e[idx] = x;
    ne[idx] = ne[k];
    ne[k] = idx;
    idx ++;
}

//将下标是k的点后面的一个点删掉
void remove(int k){
    ne[k] = ne[ne[k]];
}

我们通过一个题目来实战一下。

实现一个单链表,链表初始为空,支持三种操作:
1.向链表头插入一个数;
2.删除第 k 个插入的数后面的一个数;
3.在第 k个插入的数后插入一个数。
现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。

在这里插入图片描述
输入样例:

10
H 9
I 1 1
D 1
D 0
H 6
I 3 6
I 4 5
I 4 5
I 3 4
D 6

输出样例:

6 4 6 5

实现思路:

  • 设置数组e[]存储节点值,数组ne[]存储对应节点下一个节点的下标;
  • 设置头指针head指向第一个节点,初始值为-1;
  • 设置指针idx表示当前操作位置,初始为0即指向数组的第一个位置,单增;

样例模拟如下图所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4cf43f5fa64949b2b0734c7dbeb2f177.png

代码实现:

#include <iostream>

using namespace std;

const int N=100010;

//head表示头节点的下标
//e[i]表示节点i的值
//ne[i]表示节点i的next指针是多少
//idx存储当前已经用到了哪个点
int head,e[N],ne[N],idx=0;


void init(){
    head=-1;//空
    idx=0;//当前可以从0号点开始用
}

//在链表头插入一个x
void add_to_head(int x){
    e[idx] = x;//存值
    ne[idx] = head;//next指向head指的
    head = idx;//head指向idx的位置
    idx ++;//idx后移
}

//将x插入到下标为k的点的后面
void add(int k,int x){
    e[idx] = x;
    ne[idx] = ne[k];
    ne[k] = idx;
    idx ++;
}

//将下标是k的点后面的一个点删掉
void remove(int k){
    //当让在这特判进行删除头节点也可以
    //if(k==-1) head=ne[head];
    ne[k] = ne[ne[k]];
}


int main(){
    int m;
    cin >> m;
    init();
    while(m--){
        char s; cin >> s;
        int k,x;
        if(s == 'H'){
            cin >> x;
            add_to_head(x);
        }
        else if(s == 'D'){
            cin >> k;
            if(k == 0) head = ne[head];//删除头节点
            //特判可以放在删除函数中~
            remove(k-1);//函数中传的是下标,为k-1
        }
        else if(s == 'I'){
            cin >> k >> x;
            add(k-1,x);//函数中传的是下标,为k-1
        }
    }
    for(int i = head;i !=-1 ;i = ne[i]) cout<<e[i]<<' ';//遍历输出也背住
    cout<<endl;
    
    return 0;
}

好的,以上就是数组模拟单链表的一些内容啦~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试八股文

Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自…

appimage 软件创建桌面快捷图标

1、appimage 软件创建桌面快捷图标 1&#xff09;下载 AppImage 文件 首先&#xff0c;确保你已经下载了 AppImage 文件&#xff0c;并且该文件具有可执行权限。你可以通过以下命令为 AppImage 文件添加可执行权限&#xff1a; chmod x /path/to/your-app.AppImage2&#xff…

大模型入门 ch04:实现一个GPT模型

本文是github上的大模型教程LLMs-from-scratch的学习笔记&#xff0c;教程地址&#xff1a;教程链接 LLM大模型主要是参数量大&#xff0c;而不是代码量大。 这是本节的具体内容 首先实现一个GPT的骨架分别实现GPT骨架内的各个部分&#xff0c;包括LayerNorm&#xff0c;GELU,…

shopro前端 短信登录只显示模板不能正常切换

删掉 换成下面的代码 // 打开授权弹框 export function showAuthModal(type smsLogin) {const modal $store(modal);setTimeout(() > {modal.$patch((state) > {state.auth type;});}, 100); }

docker操作的基本命令加容器的基本命令(仅供自己参考)

1、docker build&#xff1a;本地将一个docker文件打包成镜像 2、docker push&#xff1a;将自己打包的镜像传到镜像服务器上 3、docker pull&#xff1a;将镜像服务器上的镜像拉取到本地 4、docker images&#xff1a; 查看镜像服务器上的镜像 5、docker rmi&#xff1a;删…

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MSVC版)

相邻你找了很多博文&#xff0c;都没有办法。现在终于找到了正宗。 参考 GitHub - thecodemonkey86/qt_mysql_driver: Typical symptom: QMYSQL driver not loaded. Solution: get pre-built Qt SQL driver plug-in required to establish a connection to MySQL / MariaDB u…

伊犁云计算22-1 raid 5 linux 配置

&#xff11;  添加四块&#xff53;&#xff41;&#xff54;&#xff41; 硬盘  &#xff12;  设置启动项为原来&#xff53;&#xff43;&#xff53;&#xff49; 的硬盘 &#xff13;  四块盘都是  &#xff46;&#xff44;   &#xff4c;&#xff49;&…

仓颉编程入门2,启动HTTP服务

上一篇配置了仓颉sdk编译和运行环境&#xff0c;读取一个配置文件&#xff0c;并把配置文件简单解析了一下。 前面读取配置文件&#xff0c;使用File.readFrom()&#xff0c;这个直接把文件全部读取出来&#xff0c;返回一个字节数组。然后又创建一个字节流&#xff0c;给文件…

Redis——持久化策略

Redis持久化 Redis的读写操作都是在内存上&#xff0c;所以Redis性能高。 但是当重启的时候&#xff0c;或者因为特殊情况导致Redis崩了&#xff0c;就可能导致数据的丢失。 所以Redis采取了持久化的机制&#xff0c;重启的时候利用之间持久化的文件实现数据的恢复。 Redis提…

python怎么打开编辑器

1、在电脑开始菜单中点击所有程序&#xff0c;找到Python程序&#xff0c;点击其中idle。 2、然后点击左上角的“File”&#xff0c;打开菜单&#xff0c;在下拉菜单中选择“New File”选项&#xff0c;就可打开python编辑器了。 3、在打开的python编辑器中就可以输入自己想写的…

Qwen大型语言模型系列的最新成果 ----Qwen2.5

通义千问2.5-7B-Instruct-GGUF 模型库 (modelscope.cn) apt install git-lfsgit lfs installgit clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct-GGUF.git

从源码到平台:食堂采购系统与供应链管理平台的开发详解

本篇文章&#xff0c;小编将从技术角度探讨如何基于源码开发一个食堂采购系统&#xff0c;并结合供应链管理平台的实现策略&#xff0c;帮助开发者与企业深入了解该系统的开发流程与关键要点。 一、食堂采购系统源码开发概述 食堂采购系统作为餐饮企业管理食材采购、库存以及…

综述论文“Towards Personalized Federated Learning”分享

综述论文“Towards Personalized Federated Learning”分享 文章目录 综述论文“Towards Personalized Federated Learning”分享I. 引言A. 联邦学习的分类B. 个性化联邦学习的动机C. 贡献 II. 个性化联邦学习的策略策略I&#xff1a;全局模型个性化策略II&#xff1a;学习个性…

无人机集群路径规划:麻雀搜索算法(Sparrow Search Algorithm, SSA)​求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…

2024年中国研究生数学建模竞赛【华为杯】C题-数据驱动下磁性元件的磁芯损耗建模(代码+讲解+成品论文+答疑)

2024年中国研究生数学建模竞赛&#xff0c;即华为杯&#xff0c;研赛正式开赛了&#xff0c;本次比赛white学长团队选择了C题&#xff0c;各位小伙伴可以根据自己的擅长选择合适题目&#xff0c;比赛过程中请注意以下时间节点&#xff1a; 华为杯比赛时间节点 一、背景 随着国民…

大小端字节序 和 内存高低地址顺序

目录 1. 大小端字节序 1.1 什么是大小端字节序&#xff1f; 1.2 为什么有大小端字节序? 1.3 习题&#xff1a;用程序结果判断大端小端 2. 各种易混淆的高低地址顺序 2.1 监视窗口的地址表示【计算机标准展示方式】 2.2 横向地址表示 2.3 一个字节 与 多个字节 的地址…

在腾讯云申请https(我得是腾讯云服务器),通过宝塔设置https

参考 一键 HTTPS&#xff1a;https://cloud.tencent.com/document/product/400/58062 DNS 验证&#xff1a;https://cloud.tencent.com/document/product/400/54500?from_cn_redirect1 申请免费的证书 访问连接&#xff1a;https://console.cloud.tencent.com/ssl 点击页…

Python数据分析与可视化(Python绘图详解)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【更新】上市公司绿色专利申请及授权数据(2000-2023年)

一、数据介绍 数据名称&#xff1a;上市公司-绿色专利申请、授权数据 数据范围&#xff1a;A股上市公司 数据年份&#xff1a;2000-2023年 数据样本&#xff1a;61243条 数据来源&#xff1a;国家知识产权局 二、数据指标 年份股票代码股票简称行业名称行业代码省份城市区…

SQL - 基础语法

SQL作为一种操作命令集, 以其丰富的功能受到业内人士的广泛欢迎, 成为提升数据库操作效率的保障。SQL Server数据库的应用&#xff0c;能够有效提升数据请求与返回的速度&#xff0c;有效应对复杂任务的处理&#xff0c;是提升工作效率的关键。 由于SQL Servers数据库管理系统…