算法基础—数据结构—双链表
双链表顾名思义就是一个从左到右的指针和一个从右到左的指针。
这里列一些模板
// 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;
}
算法基础—数据结构—双链表相关推荐
- 数据结构-双链表基本操作(C语言实现)
参考书:王道考研数据结构 (此贴为博主学习408的笔记,因博主也是学习者,个人总结如有错误欢迎指正.如有侵权请告知,马上删除致歉) 一:双链表含义 双链表是在单链表的基础上增加了一个指向前驱结点的 ...
- 数据结构与算法 完整版双链表
上一篇单链表博主已经讲的很详细了,相信掌握单链表的朋友搞定双链表并不困难,所以博主就之给出代码了,如果实在感觉理解困难可以留言,博主会加gif的 #include<stdio.h> #in ...
- 数据结构——双链表(C语言详述通用双链表)
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 0x00000005 3.数据结构和算法 基础数据结构 字符串(上)
文章目录 基本知识简单总结 模式匹配 最长回文子串 前缀匹配 扩展和补充* C++11常见API References: 字符串也是一个高频考察点. 虽然可以和数组考点合并,但由于该场景许多优化空间大 ...
- 天勤考研数据结构———双链表操作
定义双链表的结构体类型 typedef struct DLNode{ int data; struct DLNode *next; struct DLNode *prior; ...
- 数据结构 - 双链表的头插法和后插法
1.单链表的局限性 -> 单链表是对数组的一个扩展,解决了数组的大小比较死板不容易扩展的问题.使用堆内存来存储数据,将数据分散到各个节点之间,其各个节点在内存中可以不相连,节点之间通过指针进行单 ...
- 数据结构--双链表的创建和操作
http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一. ...
- C#数据结构-双链表
据说单链表没有回路,那么双链表也出现了,既包括后继指针,又加入了前驱指针,某个元素可以寻找他上面一个元素,也可以寻找到下一个元素.当然双链表也是链表的一种. 物理存储结构:不一定是连续的存储区域 逻辑 ...
- c# 数据结构 ---双链表
再来个双链表,其实和单链表差不多拉,循环链表也是,只是把尾元素指向Header就OK了.所以就不贴循环链表了. 1 /**//// <summary> 2 /// 双链表的节 ...
最新文章
- IJCAI 2020 已线上开奖!周志华、张成奇还将分别担任2021程序主席和2024大会主席...
- Docker 环境的快速搭建
- flask ajax 笔记
- (转)最强Android模拟器genymotion的安装与配置
- 95-910-140-源码-FlinkSQL-FlinkSQL简介
- Codeforces Round #280 (Div. 2) D. Vanya and Computer Game 二分
- MVC4 EF6 MYSQL
- win10 linux 无法下载,更新win10后不能安装ubuntu的解决方法
- c语言存储转置矩阵,C语言实现矩阵转置(附带源码)
- 积分极限定理+勒贝格控制收敛定理+高数
- 小甲鱼老师目前所有视频教程下载地址
- 福大软工 · 真 · 最终作业
- 访问者模式---萝卜青菜各有所爱
- 有什么软件做笔记比较好用?
- html页面内检索,如何用 javascript 实现html页面的关键字搜索?
- Ebean报错java.lang.ClassCastException: com.project.model.xxx cannot be cast to com.project.model.xxx
- 关于流程管理的这些事:项目流程及方法工具
- 程序是怎样跑起来的-读书文摘
- SAP中内部订单状态导致不能收货处理实例
- 学习如逆水行舟,不进则退