首页 > 编程语言 >链表算法总结

链表算法总结

时间:2023-12-03 17:37:08浏览次数:36  
标签:总结 head idx int cin ne 链表 算法 op

知识概览

链表包括单链表和双链表,这里讨论算法题中的链表。为了考虑算法题中对于时间效率的要求,链表通常是用数组模拟成静态链表的形式,速度快。

单链表可以用来写邻接表(包括n个链表),邻接表可以存储树和图,最短路问题、最小生成树问题、最大流问题都可以用邻接表来存储。

双链表用来优化某些问题。

 

单链表

题目链接

https://www.acwing.com/problem/content/828/

代码

#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;

// 初始化
void init()
{
    head = -1;
    idx = 0;
}

// 将x插到头结点
void add_to_head(int x)
{
    e[idx] = x, ne[idx] = head, head = idx++;
}

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

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

int main()
{
    int m;
    cin >> m;
    
    init();
    
    while (m--)
    {
        int k, x;
        char op;
        
        cin >> op;
        if (op == 'H')
        {
            cin >> x;
            add_to_head(x);
        }
        else if (op == 'D')
        {
            cin >> k;
            if (!k) head = ne[head];
            else remove(k - 1);
        }
        else if (op == 'I')
        {
            cin >> k >> x;
            add(k - 1, x);
        }
    }
    
    for (int i = head; i != -1; i = ne[i]) cout << e[i] << ' ';
    cout << endl;
    
    return 0;
}

 

双链表

题目链接

https://www.acwing.com/problem/content/829/

代码

#include <iostream>

using namespace std;

const int N = 100010;

int e[N], l[N], r[N], idx;

// 初始化
void init()
{
    // 0表示左端点head,1表示右端点tail
    r[0] = 1, l[1] = 0;
    idx = 2;
}

// 在下标是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)
{
    r[l[k]] = r[k];
    l[r[k]] = l[k];
}

int main()
{
    int m;
    cin >> m;
    
    init();
    
    while (m--)
    {
        string op;
        int k, x;
        cin >> op;
        
        if (op == "L")
        {
            cin >> x;
            add(0, x);
        }
        else if (op == "R")
        {
            cin >> x;
            add(l[1], x);
        }
        else if (op == "D")
        {
            cin >> k;
            remove(k + 1);
        }
        else if (op == "IL")
        {
            cin >> k >> x;
            add(l[k + 1], x);
        }
        else 
        {
            cin >> k >> x;
            add(k + 1, x);
        }
    }
    
    for (int i = r[0]; i != 1; i = r[i]) cout << e[i] << ' ';
    cout << endl;
    
    return 0;
}

 

标签:总结,head,idx,int,cin,ne,链表,算法,op
From: https://www.cnblogs.com/ykycode/p/17873449.html

相关文章

  • 2023-2024 20231404高伟光《计算机基础与程序设计》第十周学习总结
    作业信息作业内容我的班级我的班级作业要求第九周要求作业目标信息系统,数据库与SQL,人工智能与专家系统,人工神经网络,模拟与离散事件,排队系统,天气与地震模型,图形图像作业正文此博客教材内容总结c语言程序设计课本第九章初步引入了指针的介绍.......
  • 2023-2024-1 20232320 《网络空间安全导论》第四周学习总结
    教材学习内容总结本周进行了《网络空间安全导论》第四章的学习,在这一章中,教材给我们重点阐述了系统安全的原理和结构,以下是我的思维导图:教材学习中的问题和解决过程问题一:如何理解最小惊讶原则?问题一:解决方案:问AI在系统安全原理中,最小惊讶原则是指在设计安全机制时,应尽可能......
  • 【教3妹学编程-算法题】拼车
    3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”2哥 :3妹,什么事呀这么开发。3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。2哥:是啊,立冬之后天气多以多云为主,好不容易艳阳高照。可是你不能秋游,赶紧收拾收拾上班去啦3妹:哼,好吧~2哥:给你出了一道题......
  • 学期2023-2024-1学号20232417《网络》第4周学习总结
    教材内容总结通过这一章的学习,我了解了系统安全的发展历史、系统安全相关内容的概念以及系统建设的相关事宜,主要包括系统建设的基本原则、着手方式、事前预防、事后补救和保障措施等方面。教材学习中的问题及解决过程问题:在学习了课本内容后对访问控制策略还是不太清楚解决......
  • 《2023-2024-1 20232415 《网络》第三周学习总结》
        网络空间安全的系统安全聚焦于系统的安全性。虽然系统是由它的组成部分(简称为部件)连接起来构成的,但系统安全的观点认为不能把系统仅仅看作部件的集合和连接的集合,还必须把系统自身看作一个完整的单元,也就是说,要以整体的观点去看待系统。    系统安全包含两层含......
  • # 2023-2024-1 20231322 《计算机基础与程序设计》第十周学习总结
    作业信息|2022-2023-1-计算机基础与程序设计)||--|--||2022-2023-1计算机基础与程序设计第十周作业||这个作业的目标|总结本周学习成果及疑问||作业正文|(https://www.cnblogs.com/cjl03/p/17873384.html)|教材学习内容总结信息系统,数据库与SQL,人工智能与专家系统,人工神经网......
  • 文心一言 VS 讯飞星火 VS chatgpt (148)-- 算法导论12.2 3题
    三、用go语言,写出过程TREE-PREDECESSOR的伪代码。文心一言:以下是使用Go语言编写的TREE-PREDECESSOR函数的伪代码:funcTREE-PREDECESSOR(node){ifnode.parent!=nil{returnnode.parent}//如果节点是根节点,则返回nilifno......
  • 2023-2024-1 20231310 《计算机基础与程序设计》第十周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十周作业这个作业的目标信息系统、数据库与SQL、人工神经网络、模拟与离散事件、排队系统、天气与地震模型、图形图像作业正文教材学习......
  • 2023-2024-1 20232407 《网络》 第四周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题1:不知道什么是sql问题1解决方案:询问chatgptSQL(StructuredQueryLanguage)是一种用于管理关系数据库和执行相关操作的计算机语言。它允许用户从数据库中检索,更新和管理数据,包括添加,删除和修改表中的行和列。SQL是一种适用于所......
  • 2023-2024-1 20231422 《计算机基础与程序设计》第十周总结报告
    这个作业属于哪个课程2023-2024-计算机基础与程序设计这个作业要求在哪里2023-2024-计算机基础与程序设计这个作业的目标计算机科学概论第12,13,14章并完成云班课测试、《C语言程序设计》第9章并完成云班课测试作业正文(https://www.cnblogs.com/Augenstern4545/p......