2.数据结构-模板
# 2.数据结构-模板
阿斯卡码
这个作者很懒,什么都没留下…
展开
-
C++ STL
STL 是⼀个 C++ 软件库,⾥⾯包含算法(algorithms)、容 器(containers)、函数(functions)、迭代器(iterators)创建string类型变量string s; 直接创建一个空的(大小为0)的string类型变量sstring s=*char; 创建string时直接用字符串内容对其赋值,注意字符串要用双引号""string s(int n,char c); 创建一个string,由n个c组成,注意c是字符型要用单括号''读入stringcin>&g原创 2021-04-16 18:45:31 · 181 阅读 · 0 评论 -
11.哈希表(模板)
哈希表1.模拟散列表2.字符串哈希1.模拟散列表/*//模拟散列表 拉链法#include <cstring>#include <iostream>using namespace std;const int N = 1e5 + 3; // 取大于1e5的第一个质数,取质数冲突的概率最小// 多个单链表int h[N], e[N], ne[N], idx; //邻接表void insert(int x) { //只是进行了映射,具体x值不原创 2021-08-10 23:43:48 · 245 阅读 · 0 评论 -
10.堆(模板)
堆排序#include<iostream> #include<algorithm>using namespace std;const int N = 100010;int h[N], mySize;int n, m;void down(int u){ int t = u; if (2 * u <= mySize && h[t] > h[2 * u]) //down节点u--u的左儿子2*u--右儿子2*原创 2021-08-09 22:55:48 · 148 阅读 · 0 评论 -
9.并查集(模板)
1.合并集合#include<iostream>using namespace std;const int N=100010;int p[N]; //定义多个集合//返回祖宗节点+路径压缩int find(int x){ if(p[x]!=x) p[x]=find(p[x]); //p[x]表示x的父节点,每个集合中只有祖宗节点的p[x]值等于他自己,即:p[x]=x; r原创 2021-08-09 22:55:33 · 151 阅读 · 0 评论 -
8.Trie(模板)
Trie1.Trie字符串统计2.最大异或对1.Trie字符串统计#include <iostream>using namespace std;const int N = 1e5 + 10;int son[N][26]; // 其中存放的是:子节点对应的idx。其中son数组的第一维是:父节点对应的idx,第第二维计数是:其直接子节点('a' - '0')的值为二维下标。int cnt [N]; // 以“abc”字符串为例,最后一个字符---‘c’对应的idx作为cnt数组原创 2021-08-09 22:55:11 · 171 阅读 · 0 评论 -
7.KMP(模板)
1.KMP字符串#include<bits/stdc++.h>using namespace std;const int N=1000000+10;char s[N],p[N];int ne[N];int main(){ int n,m; cin>>n>>p+1>>m>>s+1; //next求法 for(int i=2,j=0;i<=n;i++) { while(j&am原创 2021-08-09 22:54:53 · 137 阅读 · 0 评论 -
6.单调队列(模板)
1.滑动窗口#include<bits/stdc++.h>using namespace std;const int N=1000000+10;int a[N];int q[N];int n,k;int main(){ cin>>n>>k; for(int i=0;i<n;i++) scanf("%d",&a[i]); // 第一行输出,从左至右,每个位置滑动窗口中的最小值 int hh=0原创 2021-08-09 22:54:39 · 327 阅读 · 0 评论 -
5.单调栈(模板)
1.单调栈#include <iostream>using namespace std;const int N = 100010;int stk[N], tt;int main(){ int n; cin >> n; for(int i=0;i<n;i++) { int x; scanf("%d", &x); //如果栈顶元素大于当前待入栈元原创 2021-08-09 22:53:59 · 192 阅读 · 0 评论 -
4.队列(模板)
1.模拟队列#include<iostream>using namespace std;const int N = 1e5 + 10;int q[N];int main() { int n; cin >> n; int hh = 0, tt = 0; while (n--) { string op; int x; cin >> op; if (op ==原创 2021-08-09 22:53:43 · 152 阅读 · 0 评论 -
3.栈(模板)
栈1.模拟栈2.表达式求值1.模拟栈#include<iostream>using namespace std;const int N=100010;int stack[N],top; //初始top=0,表示空int main(){ int m; cin>>m; while(m--) { string opration; int x;原创 2021-08-09 17:08:21 · 150 阅读 · 0 评论 -
2.双链表(模板)
1.双链表#include<iostream>using namespace std;const int N = 1e5 + 10;int m;int e[N];int l[N];int r[N];int idx;//初始化void init(){ l[1] = 0,r[0] = 1; //初始化[0]->[1] 第一个点的右边是 1 第二个点的左边是 0 idx = 2;原创 2021-08-09 17:02:23 · 143 阅读 · 0 评论 -
1.单链表(模板)
1. 单链表#include<bits/stdc++.h>using namespace std;const int N=100000+10;int head;//头节点int idx;//用到点的下标int ne[N];//指针int e[N];//数值//链表从下标0开始//初始化void init(){ head=-1; idx=0;}//插入头节点void add_to_head(int x){ e[idx]=x; ne[原创 2021-08-09 16:58:51 · 276 阅读 · 0 评论