
数据结构
以c++为例,挖一个数据结构的小坑
kylinholmes
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ STL
C++ STL 常用的 STL 头文件如下 文章目录C++ STLvectorqueuedeuqesetmapbitsetalgorithm vector 简单来说vector是一个动态数组,数组长度可变。 和数组一样支持随机访问 [] ,对比数组增加了一些函数: size/empty size函数会返回vector的元素个数,empty会返回一个bool类型,表示vector是否为空 *所有的STL容器都支持这两个方法,含义也相同,后面不再重复给出 clear 清空vector数组 begin/原创 2020-08-14 14:05:42 · 163 阅读 · 0 评论 -
离散化最妙写法
离散化最妙的写法 map<int,int> m; for(int i=0;i<n;i++){ scanf("%d",&x); x = m[x] ? m[x] : (m[x] = ++tot); }原创 2020-07-12 11:36:23 · 228 阅读 · 0 评论 -
来 看 T r i e 吧
来 看 T r i e 吧 Trie 念做 try,就是字典树。 是一种主要用于字符串快速检索的多叉树结构 const SIZE = 1e4+5; bool end[SIZE] int tire[SIZE][26], tot = 1; //假设只有小写字母 void insert(char s[]){ int L = (int)strlen(s),p = 1; for(int k=0;k<L;k++){ int ch = s[k] - 'a'; if(tire[p][ch] == 0原创 2020-06-28 03:03:16 · 231 阅读 · 0 评论 -
数组模拟二叉树
数组模拟二叉树 二叉树嘛,仔细想一下。 显而易见有以下结论: 节点 左儿子 右儿子 1 2 3 2 4 5 3 6 7 4 8 9 5 10 11 6 12 13 … … … n 2n 2n + 1 所以我们可以直接开成数组的形式。 因为对于一个i而言,左儿子是2i,右儿子是2i+1 假设我们需要N个节点,那需要多大的空间? 稍微算一下就知道了 2N - 1 自己需要开N个,所有的父节点需要开 N-1个。 又因为a[0]是不能用的,所以最少需要开a[2N]。原创 2020-06-28 02:25:00 · 884 阅读 · 2 评论 -
数组模拟实现链表
数组模拟实现链表 为什么不写成struct? 因为写法麻烦,效率低。 体现在每次需要new一个内存,new的过程非常耗时,可能1s的时间会画在new上面 直接上代码,看着代码解释好了 const int N = 1e5+5; int a[N],idx,head; // 事先申请一块大小为 N 的int类型的内存 // idx++ 模拟申请一块内存,idx-1表示链表长度 // 这些节点可能 逻辑上相邻,物理上也相邻。 int nxt[N]; // nxt[i] 记录着i号节点的下一个位置,同理可以写 pr原创 2020-06-28 02:06:38 · 257 阅读 · 0 评论 -
算法竞赛进阶指南练习 0x18
POJ 2823 Sliding Window 这个题大方向想到了,但是没想到要删除队尾的元素来维护单调性。 后来测试数据的时候发现之前的写法有问题,想了一圈不知道应该改哪里,后来还是去搜了一下别人的思路,发现需要维护队尾的单调性。 最后借鉴的标答的代码,写的真的简洁,比其他人的都短好多。 除了单调队列,这个是不是还可以用区间dp,线段树。但我觉得可能会超时吧。 #include <iostream> #include <cstring> #include <algorithm原创 2020-06-23 20:52:25 · 321 阅读 · 0 评论 -
数据结构 — 栈 和 队列
数据结构 — 栈 和 队列 最简单易懂的教程 栈 栈就好比是家里的盘子,堆起来的那种。 每次拿盘子都是拿最上面的,放也放在最上面。 再对于数组来说,就是每次只能把数据放到最后,取出数据也只能取出最后的。 先入后出,后入先出 这里直接写代码吧,下面的写法适用于程序设计竞赛 const int N = 1e5 + 5; int a[N],m; void push(int num){ // 入栈 ...原创 2020-04-17 10:55:39 · 199 阅读 · 0 评论