Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >算法基础-数据结构

算法基础-数据结构

作者头像
她的店里只卖樱花
发布于 2022-10-31 08:39:55
发布于 2022-10-31 08:39:55
46300
代码可运行
举报
文章被收录于专栏:常用算法模板常用算法模板
运行总次数:0
代码可运行

单链表

01.单链表

题目描述

实现一个单链表,链表初始为空,支持三种操作:

  1. 向链表头插入一个数;
  2. 删除第 k 个插入的数后面的数;
  3. 在第 k 个插入的数后插入一个数。

现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。

注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。

输入格式

第一行包含整数 M,表示操作次数。

接下来 M 行,每行包含一个操作命令,操作命令可能为以下几种:

  1. H x,表示向链表头插入一个数 x
  2. D k,表示删除第 k 个插入的数后面的数(当 k0 时,表示删除头结点)。
  3. I k x,表示在第 k 个插入的数后面插入一个数 x(此操作中 k 均大于 0)。

输出格式

共一行,将整个链表从头到尾输出。

数据范围

1\le M\le 100000所有操作保证合法。

输入样例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

输出样例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
6 4 6 5

题解

时间复杂度:O(1)

核心思想

是一个模板题直接背板子

tps:注意特判下,要删除的元素的下标是不是0,如果是0,那我们就删除头节点。 由于单链表的下标是0 ~ n - 1, 我们要判断的是1 ~ n, 所以在传入下标的时候记得 -1

核心函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void init(){
    idx = 0;
    head = -1;
}
void add_to_head(int x){
    e[idx] = x; 
    ne[idx] = head;
    head = idx ++ ;
}

void remove(int k){
    ne[k] = ne[ne[k]];
    
}

void insert(int x, int k){
    e[idx] = x; 
    ne[idx] = ne[k];
    ne[k] = idx ++ ;
}

代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

using namespace std;

const int N = 100010;
int M;
int ne[N], e[N], idx, head;

void init(){
    idx = 0;
    head = -1;
}
void add_to_head(int x){
    e[idx] = x; 
    ne[idx] = head;
    head = idx ++ ;
}

void remove(int k){
    ne[k] = ne[ne[k]];
    
}

void insert(int x, int k){
    e[idx] = x; 
    ne[idx] = ne[k];
    ne[k] = idx ++ ;
}

int main (){
    cin >> M;
    init();
    while(M --)
    {
        int x, k;
        char op[2]; 
        cin >> op;
        if(*op == 'H')
        {
            cin >> x;
            add_to_head(x);
        }
        else if(*op == 'D')
        {
            cin >> k;
            if(k)
                remove(k - 1);
            else
                head = ne[head]; // 删除头节点
        }
        else 
        {
            cin >> k >> x; 
            insert(x, k - 1);
        }
    }
    
    for(int i = head; i != -1; i = ne[i])  
        cout << e[i] << " ";
    cout << endl; 
    return 0;
}

双链表

01.双链表

01.模拟栈

02.表达式求值

队列

01.模拟队列

单调栈

01.单调栈

单调队列

01.滑动窗口

KMP

01.KMP字符串

Trie

01.Trie字符串统计

02.最大异或对

并查集

01.合并集合

02.连通块中点的数量

03.食物链

01.堆排序

02.模拟堆

哈希表

01.模拟散列表

02.字符串哈希

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法】静态单链表、双链表、单调栈与单调队列
考虑到效率问题,如果每次都去new结点效率比较慢,平时做题时不采用动态:在有严格的时间要求的环境中,不能频繁使用new操作,new的底层涉及内存分配,调用构造函数,指针转换等多种复杂且费时的操作。也就不能使用结构体来实现数组。
平凡的人1
2023/10/15
1510
【算法】静态单链表、双链表、单调栈与单调队列
数组模拟几种基本的数据结构
首先类比结构体存储单链表,我们需要一个存放下一个节点下标的数组,还需要一个存储当前节点的值的数组,其次就是一个int类型的索引,这个索引指向的是下一个我们准备用的空间,还需要一个head,head存放的是头结点的下标
用户11305458
2024/10/09
410
数组模拟几种基本的数据结构
数据结构篇——链表
数据结构篇——链表 本次我们介绍基础算法中的区间合并,我们会从下面几个角度来介绍: 单链表 双链表 单链表 我们会在这里介绍单链表 单链表简介 我们首先来简单介绍一下单链表: 单链表就是一条长链,我们会延一个固定的顺序来获得或增添值 我们在算法计算中,通常会采用数组来模拟单链表来完成一些操作 单链表的作用: 单链表的作用其实是用来设计邻接表,由n个单链表来组成邻接表 而邻接表的作用是用来存储后续我们所学习的图和数 单链表基本组成 我们这里的单链表由以下几部分组成: head:头节点,用于存储下一个节点的位
秋落雨微凉
2022/11/18
2940
数据结构篇——链表
算法基础:单链表图解及模板总结
如果说用结构体+指针的方式实现链表和栈的话,每次需要new一个新节点,非常慢。笔试题链表大小在10万级别,因此笔试题一般不会采用这种动态链表的方式。通常采用数组模拟链表的方式,这种方式更快。
timerring
2022/11/30
3310
算法基础:单链表图解及模板总结
算法基础学习笔记——⑥链表\栈\队列
命运之光
2024/03/20
1100
算法基础学习笔记——⑥链表\栈\队列
单链表(Java每日一题)
向链表头插入一个数; 删除第 k 个插入的数后面的数; 在第 k 个插入的数后插入一个数。 现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。
GeekLiHua
2025/01/21
650
《算法竞赛进阶指南》0x18 总结与练习
这一天,刚刚起床的达达画了一排括号序列,其中包含小括号 ( )、中括号 [ ] 和大括号 { },总长度为
一只野生彩色铅笔
2022/10/31
9560
《算法竞赛进阶指南》0x18 总结与练习
AC 自动机详解
Trie 是一种能够快速插入和查询字符串的多叉树结构。节点的编号各不相同,根节点编号为0,其他节点用来标识路径还可以标记单词插入的次数。边表示字符。
浪漫主义狗
2023/02/18
1.1K0
AC 自动机详解
数据结构篇——哈希表
数据结构篇——哈希表 本次我们介绍数据结构中的哈希表,我们会从下面几个角度来介绍: 哈希表介绍 例题模拟散列表的两种方法 字符串前缀哈希法 哈希表介绍 首先我们先来简单介绍一下哈希表: 哈希表主要负责将空间较大的离散的数压缩为空间较小的数 例如我们将10-9~109之间的离散数可以压缩到10^5数组中 我们哈希表的主要算法为: 将x mod 10^5 得出余数,按照余数放在压缩后的数组中去 如果遇到冲突问题,我们采用两种方法来解决:拉链法和开放寻址法 我们给出两种解决方式: 拉链法:整个数组额外创建e[n
秋落雨微凉
2022/11/22
2970
408-数据结构
第1讲 时间复杂度、矩阵展开 一、时间、空间复杂度 只考虑次数,不考虑常数。常见复杂度有:O(1)、O(n)、O(sqrt(n))、O(n^k)、O(logn)、O(nlogn) 考题:2011-1、2012-1、2013-1、2014-1、2017-1、2019-1 二、矩阵展开 矩阵的按行展开、按列展开,展开后下标从0开始。 考题:2016-4、2018-3、2020-1
她的店里只卖樱花
2022/11/15
3410
【简单】数组模拟的双链表
现在要对该链进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数,是按插入时间的第 k 个数。
字节星球Henry
2021/08/09
8790
「单调队列」数据结构解决滑动窗口问题
前文用 单调栈解决三道算法问题 介绍了单调栈这种特殊数据结构,本文写一个类似的数据结构「单调队列」。
labuladong
2021/09/23
4030
[数据结构与算法] 邂逅链表
在我们的生活中, 最符合链表结构(准确的说是双链表)的物体的就是火车了(如下图). 我们在车厢内时,每次只能从本车厢到下一个车厢或者上一个车厢,如同对链表的遍历操作一样~~~
时间静止不是简史
2020/07/25
4940
[数据结构与算法] 邂逅链表
Trie树模板与应用
Trie树是用来快速存储和查找 字符串集合的数据结构。某个字符串集合对应的有根树。树的每条边上对应有恰好一个字符,每个顶点代表从根到该节点的路径所对应的字符串(将所有经过的边上的字符按顺序连接起来)。利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
timerring
2023/06/13
2500
Trie树模板与应用
码神爆肝数据结构——总长5w字,附带例题
应广大支持者的要求,随我自身学习之余,肝数据结构,开车只是暂时的,飙车才是认真的,数据结构开始了,本文用c++编写,如果有不足的地方欢迎大家补充
秋名山码神
2022/12/13
6880
码神爆肝数据结构——总长5w字,附带例题
c++单链表的基本操作(全)
俩个基本插入方法 #include <bits/stdc++.h> using namespace std; typedef struct LNode { int date; //节点的数据域 struct LNode *next; //节点的指针域 }LNode,*LinkList; // LinkList 为指向结构体LNode的指针类型 bool Initlist_L(LinkList &L) //构造一个空的单链表L { L = new
莫浅子
2022/11/18
6260
c++单链表的基本操作(全)
《王道》数据结构笔记整理2022级_数据结构笔记整理
1.数据:数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别和处理的符号的集合。
全栈程序员站长
2022/09/22
3.1K0
《王道》数据结构笔记整理2022级_数据结构笔记整理
Java版算法模版总结(2)
「单调栈」首先是一种基于栈的数据结构,只不过通过栈来维护的是单调递增或单调递减的数据。入栈和出栈都是操作栈顶。对于每一个元素都只有一次入栈和出栈的操作,因此时间复杂度为O(N)。
Monica2333
2020/12/17
4990
Java版算法模版总结(2)
【数据结构与算法】【约瑟夫问题】还在用递归?教你用链表秒杀约瑟夫
本文原本是对链表学习的记录笔记 因为约瑟夫问题笔记经典就拿来做大题材了,要是没学过链表或者链表还不熟悉的伙伴可以慢慢读,要是以及学过链表了,纯粹来看全新的解题思路的 可以用目录传送门往下跳
苏泽
2024/03/01
2040
作为程序员你真的清楚数据结构吗
数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。
苏州程序大白
2022/04/14
3010
作为程序员你真的清楚数据结构吗
相关推荐
【算法】静态单链表、双链表、单调栈与单调队列
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验