算法基础之数据结构模板
数据结构模板
单链表
1 | // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 |
双链表
1 | // e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点 |
栈
1 | // tt表示栈顶 |
队列
普通队列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// hh 表示队头,tt表示队尾
int q[N], hh = 0, tt = -1;
// 向队尾插入一个数
q[ ++ tt] = x;
// 从队头弹出一个数
hh ++ ;
// 队头的值
q[hh];
// 判断队列是否为空
if (hh <= tt) {
}循环队列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 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) {
}单调栈
1 | 常见模型:找出每个数左边离它最近的比它大/小的数 |
单调队列
1 | 常见模型:找出滑动窗口中的最大值/最小值 |
KMP
1 | // s[]是长文本,p[]是模式串,n是s的长度,m是p的长度 |
Tire树
1 | int son[N][26], cnt[N], idx; |
评论
Va