![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 56
magnte
这个作者很懒,什么都没留下…
展开
-
并查集
并查集一般包括两个操作: 1:将两个集合合并 2:询问两个元素是否在一个集合中 按常规方法来做,一般是用个数组belong[x] = a,表示元素x在集合a中,执行操作一时要遍历整个数组所以复杂度为O(n),操作二直接判断复杂度O(1). 而在并查集中,用树来储存元素,每棵树的根节点为集合编号,p[x]为x的父节点。 执行操作一时,只需将某棵树的祖先结点接到另一棵树的祖先结点之下就行了.操作二判断两棵树的祖先结点是否相同即可,复杂度都为O(1).(寻找祖先结点本应该为logn,但在find函数中用了路.原创 2021-08-08 21:25:22 · 171 阅读 · 0 评论 -
KMP模板
输出主串s所有能够和字串匹配的第一个位置下标 #include<bits/stdc++.h> using namespace std; const int N = 100010,M = 1000010; int ne[M],n,m; char s[M],p[N]; int main() { cin>>n>>p + 1>>m>>s + 1;//从下标1开始 for(int i = 2,j = 0; i <= n; i .原创 2021-08-08 17:15:35 · 62 阅读 · 0 评论 -
双链表操作
实现一个双链表,双链表初始为空,支持 5 种操作: 在最左侧插入一个数; 在最右侧插入一个数; 将第 k 个插入的数删除; 在第 k 个插入的数左侧插入一个数; 在第 k 个插入的数右侧插入一个数 现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。 注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个原创 2021-07-30 17:42:14 · 226 阅读 · 0 评论 -
单调栈
单调递减栈:从顶部到底部依次递减的栈。(用于找向左或向右找第一个小于x的数) 单调递增栈:从顶部到底部依次递增的栈。**(用于找向左或向右找第一个大于x的数)* 个人理解:找第一个大的数用单调递增栈,因为单调递增栈一层比一层大。每一层之间小于前一层的数都被弹出,如果前一层没比他大,那么之间的数肯定也不会,所以这些数没意义被弹出。递减栈同理。 例如数据 4 3 7 2 1 构成一个单调递增栈的话: 4 3 4 7 2 7 1 2 7 给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数.原创 2021-07-29 23:56:27 · 92 阅读 · 0 评论 -
单链表操作
用数组模拟单链表的一些基础操作 #include<bits/stdc++.h> using namespace std; const int N = 100010; int head,idx,ne[N],e[N]; void init()//初始化 { head = -1; idx = 0;//结点编号 } void addh(int x)//往头结点之后插入值为x的结点 { e[idx] = x; ne[idx] = head;//最后一个空结点值为-1原创 2021-07-29 17:45:42 · 156 阅读 · 0 评论