模板 -基础数据结构
整理的算法模板合集: ACM模板
目录
- 单链表
- 双链表
- 栈
- 循环队列
- 单调栈
- 单调队列
- 堆
- 一般哈希
单链表
// head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点
int head, e[N], ne[N], idx;// 初始化
void init()
{head = -1;idx = 0;
}// 在链表头插入一个数a
void insert(int a)
{e[idx] = a, ne[idx] = head, head = idx ++ ;
}// 将头结点删除,需要保证头结点存在
void remove()
{head = ne[head];
}
双链表
// e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点
int e[N], l[N], r[N], idx;// 初始化
void init()
{//0是左端点,1是右端点r[0] = 1, l[1] = 0;idx = 2;
}// 在节点a的右边插入一个数x
void insert(int a, int x)
{e[idx] = x;l[idx] = a, r[idx] = r[a];l[r[a]] = idx, r[a] = idx ++ ;
}// 删除节点a
void remove(int a)
{l[r[a]] = l[a];r[l[a]] = r[a];
}
栈
// tt表示栈顶
int stk[N], tt = 0;// 向栈顶插入一个数
stk[ ++ tt] = x;// 从栈顶弹出一个数
tt -- ;// 栈顶的值
stk[tt];// 判断栈是否为空
if (tt > 0)
{}
循环队列
// hh 表示队头,tt表示队尾的后一个位置
int q[N], hh = 0, tt = 0;// 向队尾插入一个数
q[tt ++ ] = x;
if (tt == N) tt = 0;// 从队头弹出一个数
hh ++ ;
if (hh == N) hh = 0;// 队头的值
q[hh];// 判断队列是否为空
if (hh != tt)
{}
单调栈
/*常见模型:找出每个数左边离它最近的比它大/小的数*/
int tt = 0;
for (int i = 1; i <= n; i ++ )
{while (tt && check(stk[tt], i)) tt -- ;stk[ ++ tt] = i;
}
单调队列
/*常见模型:找出滑动窗口中的最大值/最小值*/
int hh = 0, tt = -1;
for (int i = 0; i < n; i ++ )
{while (hh <= tt && check_out(q[hh])) hh ++ ; // 判断队头是否滑出窗口while (hh <= tt && check(q[tt], i)) tt -- ;q[ ++ tt] = i;
}
堆
// h[N]存储堆中的值, h[1]是堆顶,x的左儿子是2x, 右儿子是2x + 1
// ph[k]存储第k个插入的点在堆中的位置
// hp[k]存储堆中下标是k的点是第几个插入的
int h[N], ph[N], hp[N], size;// 交换两个点,及其映射关系
void heap_swap(int a, int b)
{swap(ph[hp[a]],ph[hp[b]]);swap(hp[a], hp[b]);swap(h[a], h[b]);
}void down(int u)
{int t = u;if (u * 2 <= size && h[u * 2] < h[t]) t = u * 2;if (u * 2 + 1 <= size && h[u * 2 + 1] < h[t]) t = u * 2 + 1;if (u != t){heap_swap(u, t);down(t);}
}void up(int u)
{while (u / 2 && h[u] < h[u / 2]){heap_swap(u, u / 2);u >>= 1;}
}// O(n)建堆
for (int i = n / 2; i; i -- ) down(i);
一般哈希
(1) 拉链法
int h[N], e[N], ne[N], idx;// 向哈希表中插入一个数void insert(int x){int k = (x % N + N) % N;e[idx] = x;//存到邻接表里ne[idx] = h[k];h[k] = idx ++ ;}// 在哈希表中查询某个数是否存在bool find(int x){int k = (x % N + N) % N;for (int i = h[k]; i != -1; i = ne[i])if (e[i] == x)return true;return false;}
(2) 开放寻址法
int h[N];// 如果x在哈希表中,返回x的下标;如果x不在哈希表中,返回x应该插入的位置
int find(int x)
{int t = (x % N + N) % N;while (h[t] != null && h[t] != x){t ++ ;if (t == N) t = 0;}return t;
}
以上模板来自yxc
模板 -基础数据结构相关推荐
- 算法——常用的数据结构/模板/基础知识
常用的数据结构/模板/基础知识 (一)c++--优先队列(priority_queue) 最大堆和最小堆的写法 (二)c++中的全排列函数next_permutation() (三)迭代器的使用 (四 ...
- 你需要知道的基础算法知识——STL和基础数据结构(六)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(七)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(五)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(四)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(二)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(一)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- Algorithms_基础数据结构(04)_线性表之链表_单向循环链表约瑟夫环问题
文章目录 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 约瑟夫问题 结构 分析 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈, ...
- Algorithms_基础数据结构(03)_线性表之链表_双向链表
文章目录 大纲图 双向链表 双向链表的基本结构 双向链表的基本操作 头插 尾插 中间部位插入 删除头部 删除尾部 删除中间位置的数据 查找 更新 Code 总结 大纲图 双向链表 Algorithms ...
最新文章
- szu 寒训复习day #4数论入门详解[修改]用Mardown再改了一下
- (0003) iOS 开发之App 适配iOS 10
- Hadoop Streaming编程实例
- 鸟哥的Linux私房菜(服务器)- 簡易 OpenWebMail 設定
- 根据录入的计算公式计算_工业铝型材承重计算
- 当推荐系统遇上多模态Embedding
- java nio is例子,Java Buffer isDirect()用法及代码示例
- 关于双黑洞和引力波,LIGO科学家回答了这7个你可能会关心的问题
- NAS 百科 —— http://baike.baidu.com/item/NAS%E7%BD%91%E7%BB%9C%E5%AD%98%E5%82%A8
- php mysql sum用法_mysql怎么使用sum()求id字段的和?
- 最速下降法matlab全局最小值_MATLAB实现最速下降法
- python如何安装numpy模块?
- 不用vpn的谷歌翻译网址
- 谷歌地图高清卫星地图
- React 还是 Vue: 你应该选择哪一个Web前端框架?
- 类和结构体的内存空间占有问题
- 【C++】C++中头文件使用双引号与书名号的区别
- 【spring】spring 的事务(transaction) 四 嵌套事务PROPAGATION_NESTED
- app 评论功能实现
- 大学英语(第三册)复习(原文及全文翻译)——Unit 1 - A Brush with the Law(与警察的一场小冲突)