双链表顾名思义就是一个从左到右的指针和一个从右到左的指针。

这里列一些模板

// e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点
int e[N], l[N], r[N], idx;//初始化
void intx(){//0是左端点,1是右端点l[1] = 0;r[0] = 1;idx = 2;
}//删除
int remove(int k){r[l[k]] = r[k];l[r[k]] = l[k];
}//添加 (左右都可以添加)
int add(int k,int x){e[idx] = x;r[idx] = ne[k];l[idx] = k;l[r[k]] = idx;r[k] = idx++;
}

然后来看一个例题套模板;

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

看似5哥操作很繁琐,其实只有2个,一个是删除,另一个就是添加,不过添加时要注意左右。

#include<bits/stdc++.h>
using namespace std;  const int N = 1e5+9;
int e[N],r[N],l[N],idx;void intx(){l[1] = 0;r[0] = 1;idx = 2;
}int add(int k,int x){e[idx] = x;r[idx] = r[k];l[idx] = k;l[r[k]] = idx;r[k] = idx++;
}int remove(int k){r[l[k]] = r[k];l[r[k]] = l[k];
}int main(){int m;intx();cin >> m;while(m--){int k,x;string op;cin >> op;if(op=="D"){cin >> k;remove(k+1);}else if(op=="L"){cin >> x;add(0,x);}else if(op=="R"){cin >> x;add(l[1],x);}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;
}

算法基础—数据结构—双链表相关推荐

  1. 数据结构-双链表基本操作(C语言实现)

    参考书:王道考研数据结构 (此贴为博主学习408的笔记,因博主也是学习者,个人总结如有错误欢迎指正.如有侵权请告知,马上删除致歉)​​ 一:双链表含义 双链表是在单链表的基础上增加了一个指向前驱结点的 ...

  2. 数据结构与算法 完整版双链表

    上一篇单链表博主已经讲的很详细了,相信掌握单链表的朋友搞定双链表并不困难,所以博主就之给出代码了,如果实在感觉理解困难可以留言,博主会加gif的 #include<stdio.h> #in ...

  3. 数据结构——双链表(C语言详述通用双链表)

    说明:   本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉.   QQ 群 号:513683159 [相 ...

  4. 0x00000005 3.数据结构和算法 基础数据结构 字符串(上)

    文章目录 基本知识简单总结 模式匹配 最长回文子串 前缀匹配 扩展和补充* C++11常见API References: 字符串也是一个高频考察点. 虽然可以和数组考点合并,但由于该场景许多优化空间大 ...

  5. 天勤考研数据结构———双链表操作

    定义双链表的结构体类型 typedef struct DLNode{     int data;     struct DLNode *next;     struct DLNode *prior; ...

  6. 数据结构 - 双链表的头插法和后插法

    1.单链表的局限性 -> 单链表是对数组的一个扩展,解决了数组的大小比较死板不容易扩展的问题.使用堆内存来存储数据,将数据分散到各个节点之间,其各个节点在内存中可以不相连,节点之间通过指针进行单 ...

  7. 数据结构--双链表的创建和操作

    http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一. ...

  8. C#数据结构-双链表

    据说单链表没有回路,那么双链表也出现了,既包括后继指针,又加入了前驱指针,某个元素可以寻找他上面一个元素,也可以寻找到下一个元素.当然双链表也是链表的一种. 物理存储结构:不一定是连续的存储区域 逻辑 ...

  9. c# 数据结构 ---双链表

    再来个双链表,其实和单链表差不多拉,循环链表也是,只是把尾元素指向Header就OK了.所以就不贴循环链表了.   1 /**//// <summary>   2    /// 双链表的节 ...

最新文章

  1. IJCAI 2020 已线上开奖!周志华、张成奇还将分别担任2021程序主席和2024大会主席...
  2. Docker 环境的快速搭建
  3. flask ajax 笔记
  4. (转)最强Android模拟器genymotion的安装与配置
  5. 95-910-140-源码-FlinkSQL-FlinkSQL简介
  6. Codeforces Round #280 (Div. 2) D. Vanya and Computer Game 二分
  7. MVC4 EF6 MYSQL
  8. win10 linux 无法下载,更新win10后不能安装ubuntu的解决方法
  9. c语言存储转置矩阵,C语言实现矩阵转置(附带源码)
  10. 积分极限定理+勒贝格控制收敛定理+高数
  11. 小甲鱼老师目前所有视频教程下载地址
  12. 福大软工 · 真 · 最终作业
  13. 访问者模式---萝卜青菜各有所爱
  14. 有什么软件做笔记比较好用?
  15. html页面内检索,如何用 javascript 实现html页面的关键字搜索?
  16. Ebean报错java.lang.ClassCastException: com.project.model.xxx cannot be cast to com.project.model.xxx
  17. 关于流程管理的这些事:项目流程及方法工具
  18. 程序是怎样跑起来的-读书文摘
  19. SAP中内部订单状态导致不能收货处理实例
  20. 学习如逆水行舟,不进则退

热门文章

  1. ​linux 添加开机启动项的三种方法
  2. Eclipse Plungins--Pydev
  3. 关系抽取调研——工业界
  4. Sources for ‘Android API 32 Platform’ not found
  5. Mysql基础篇(3)—— MySQL数据库类型
  6. STM32CUBE 定时器使用
  7. 安卓实现每日一句功能-一言API调用
  8. IDEA使用database时,连接MySQL后schemas不显示数据库名的情况
  9. NVMe驱动解析-注册设备
  10. 一张图看懂MTK 芯片命名规则