算法板子:使用数组模拟双链表——初始化链表、插入结点、删除结点

news2024/9/20 10:32:26

插入操作的指针修改顺序:

在这里插入图片描述

代码:

#include <iostream>
using namespace std;

const int N = 1e5 + 10;

// e[i]代表i结点的值; l[i]代表i结点左边结点的下标; r[i]代表i结点右边结点的下标; idx代表当前可用结点的下标
int e[N], l[N], r[N], idx;

// 初始化
// 初始的时候有两个结点,左边结点下标为0,右边结点下标为1; 0永远是最左边的结点,1永远是最右边的结点
void init()
{
    r[0] = 1;
    l[1] = 0;
    // 0和1结点已经用了,可用结点从2开始
    idx =  2;
}

// 在下标为k的结点右边插入一个结点
// 如果是在k的左边插入一个结点,相当于在k的左边的结点的右边插入一个结点,等价于add(l[k], x);
void add(int k, int x)
{
    e[idx] = x;
    r[idx] = r[k], l[idx] = k; 
    l[r[k]] = idx, r[k] = idx;
    idx ++ ;
}

// 删除下标为k的结点
void remove(int k)
{
    l[r[k]] = l[k];
    r[l[k]] = r[k];
}


int main()
{
    int m;
    cin >> m;
    
    // 一定记得先初始化链表!
    init();
    while (m -- )
    {
        string op;
        cin >> op;
        if (op == "L")
        {
            int x;
            cin >> x;
            add(0, x);
        } 
        else if (op == "R")
        {
            int x;
            cin >> x;
            add(l[1], x);
        }
        else if (op == "D")
        {
            int k;
            cin >> k;
            remove(k + 1);
        }
        else if (op == "IL")
        {
            int k, x;
            cin >> k >> x;
            add(l[k + 1], x);
        }
        else if (op == "IR")
        {
            int k, x;
            cin >> k >> x;
            add(k + 1, x);
        }
        
    }
    
    // 输出链表
    for (int i = r[0]; i != 1; i = r[i]) printf("%d ", e[i]);
    
    return 0;
}

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

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

相关文章

一刷代码随想录(回溯4)

递增子序列 题意&#xff1a; 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会…

vue3里将table表格中的数据导出为excel

想要实现前端对表格中的数据进行导出&#xff0c;这里推荐使用xlsx这个依赖库实现。 1、安装 pnpm install xlsx 2、使用 import * as XLSX from "xlsx"; 直接在组件里导入XLSX库&#xff0c;然后给表格table通过ref创建响应式数据拿到table实例&#xff0c;将实…

多机构发布智能锁2024半年报:德施曼上半年线上全渠道销额稳居第一

近日&#xff0c;权威机构奥维云网、洛图科技先后发布智能门锁2024半年报&#xff0c;报告均指出上半年中国智能门锁线上渠道持续增长。奥维云网数据显示&#xff0c;2024上半年线上渠道销量同比增长22.7%&#xff0c;成行业增长最快的部分&#xff1b;洛图科技强调&#xff0c…

【React学习打卡第五天】

性能优化相关API、编写类API与zustand 一、useReducer1.基础用法2.分派action时传参 二、useMemo1.基础语法 三、React.memo1.基础语法2.React.memo - props的比较机制 四、useCallback基础语法 五、React.forwardRef六、useInperativeHandle七、类组件编写1.基础结构2.生命周期…

【Linux】:进程间通信及管道

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来进程间通信相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结…

“智能体风”吹进体育圈 粉丝手搓上百个智能体为中国健儿应援 太有AI了!粉丝手搓上百个智能体为中国健儿打CALL

智能体的风吹进了体育竞技圈。近日&#xff0c;在百度文心智能体平台&#xff0c;出现了上百个充满“AI”的运动明星粉丝应援智能体&#xff0c;比如支持中国女子乒乓球运动员孙颖莎的“孙颖莎的小迷妹”、支持中国女子跳水队员全红婵的“婵婵的小书包”&#xff0c;应援中国女…

中国医疗AI领头羊讯飞医疗:最新招股书显示前三月收入破亿大关!

讯飞医疗&#xff0c;医疗AI创新企业&#xff0c;收入领先市场。计划港交所上市&#xff0c;用于研发升级、产品扩展及并购。市场潜力巨大&#xff0c;未来发展可期&#xff0c;将成医疗AI璀璨明星。 各位看官&#xff0c;最近科技圈儿又有大新闻啦&#xff01;讯飞医疗科技股份…

时间序列分析方法之 -- 自回归模型(Autoregressive Model, AR)

目录 原理 适用情况 Python 示例代码 结论 原理 自回归模型&#xff08;Autoregressive Model, AR&#xff09;是一种时间序列模型&#xff0c;用于描述一个时间序列的当前值与其过去值之间的关系。自回归模型假设时间序列的当前值是其过去若干值的线性组合&#xff0c;并…

Github 2024-07-26开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目2TypeScript项目2C++项目2HTML项目1Python项目1C#项目1Lua项目1JavaScript项目1Vue项目1C项目1免费编程学习平台:freeCodeCamp.org 创…

HANA-sum函数与sum() over(partition by ... order by ... )

sum函数与sum() over(partition by … order by … ) sum()函数就不介绍了。 sum() over(partition by … order by … )其实就是累加的过程具体化。 比如 有1,2,3,4 sum&#xff08;&#xff09;就会得到10 sum() over(partition by … order by … ) 就会得到&#xff1a;1,3…

leetocde662. 二叉树最大宽度,面试必刷题,思路清晰,分点解析,附代码详解带你完全弄懂

leetocde662. 二叉树最大宽度 做此题之前可以先做一下二叉树的层序遍历。具体题目如下&#xff1a; leetcode102二叉树的层序遍历 我也写过题解&#xff0c;可以先看看学习一下&#xff0c;如果会做层序遍历了&#xff0c;那么这题相对来说会简单很多。 具体题目 给你一棵…

数据结构 链式存储 +

int DeleteLinkList(LinkList *list, char *name); int ReviseLinkList(LinkList *list, char *name, DATATYPE data); int DestroyLinkList(LinkList *list); int InsertTailLinkList(LinkList *list, DATATYPE data); ​​​​​​​删除 修改​​​​​​​ 销毁 ​​​​​…

Anaconda、Pytorch安装

Anaconda 打开 Anaconda 官网 https://www.anaconda.com/ 点击右上角的 Free Download 可以选择相应的型号进行下载 如果版本不合适&#xff0c;可以进入 anaconda 的历史版本官网选择适合本机 python 版本的 anaconda 进行下载&#xff1a; https://repo.anaconda.com/arc…

Django-3.3创建模型

创建模型&#xff08;models&#xff09;的时候&#xff0c; 1&#xff1a;我们需要这个模型是哪个文件下面的模型&#xff08;models&#xff09;&#xff0c;我们需要在配置文件中吧应用安装上&#xff08;安装应用&#xff1a;INSTALLED_APPS&#xff09; 2&#xff1a;找对…

【java计算机毕设】在线考试系统java MySQL ssm jsp maven项目设计代码前后端一体 寒暑假小组作业

目录 1项目功能 2项目介绍 3项目地址 1项目功能 2项目介绍 系统功能&#xff1a; ssm在线考试管理系统包括管理员、用户俩种角色。 管理员功能包括在线考试&#xff0c;参加考试&#xff0c;我的成绩&#xff0c;我的错题&#xff0c;资源大全&#xff0c;下载资源&#xf…

GUL图形化界面操作(下部)

目录 ​编辑 前言 Swing 窗口 注意点 新增的组件 进度条组件 开关按钮 多面板和分割面板 多面板 分割面板 ​编辑 选项窗口 对话框带三个选项是&#xff0c;否&#xff0c;取消。 对话框提示输入文本: 前言 修炼中&#xff0c;该篇文章为俺很久前的学习笔记 Swi…

Matlab类阿克曼车机器人运动学演示

v1是后驱动轮轮速&#xff0c; v2是转向角变化速度&#xff0c; 实际上我们只需要关注XQ&#xff0c; YQ和Phi的变化率。 通过这三项和时间步长&#xff0c; 我们就可以计算出变化量&#xff0c; 再结合初始值就能推断出每个时刻的值。 % 清理当前运行环境 % 清除所有变量 cle…

Windosw下Visual Studio2022编译FFmpeg(支持x264、x265、fdk-acc)

FFmpeg 7.0 版本移除了 6.0 之前已弃用的 API&#xff0c;无法向下兼容。所以编译的版本选择FFmpeg 6.1.1。 一、安装Visual Studio2022 可参考另外一篇文章&#xff1a;Windows安装Visual Studio2022 QT5.15开发环境_qt5.15.2 vs2022-CSDN博客 二、安装MSYS2 下载地址&…

企业创建百度百科有什么好处?

现如今&#xff0c;网络越来越发达&#xff0c;网络营销的方法百花齐放&#xff0c;对于企业和品牌来说,想要推广产品,就是提升知名度,让更多的人知道企业和品牌。 而百度现如今在中国的搜索市场上仍是巨头,而在百度上有权威,以及能提升企业知名度的就是百度百科了。 今天&…

Linux基础复习(二)

前言 本文介绍了一下Linux命令行基本操作及网络配置 一、 命令行提示含义 [当前用户主机名 工作目录]$ 若当前用户是root&#xff0c;则最后一个字符为# 否则&#xff0c;最后一个字符为$ 二、常用Linux命令及其解释 修改主机名 一般在创建一台主机后会使用hostname相关命…