数据结构
文章平均质量分 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 · 196 阅读 · 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 · 80 阅读 · 0 评论 -
双链表操作
实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个原创 2021-07-30 17:42:14 · 248 阅读 · 0 评论 -
单调栈
单调递减栈:从顶部到底部依次递减的栈。(用于找向左或向右找第一个小于x的数)单调递增栈:从顶部到底部依次递增的栈。**(用于找向左或向右找第一个大于x的数)*个人理解:找第一个大的数用单调递增栈,因为单调递增栈一层比一层大。每一层之间小于前一层的数都被弹出,如果前一层没比他大,那么之间的数肯定也不会,所以这些数没意义被弹出。递减栈同理。例如数据 4 3 7 2 1 构成一个单调递增栈的话:43 472 71 2 7给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数.原创 2021-07-29 23:56:27 · 109 阅读 · 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 · 181 阅读 · 0 评论