数据结构(C++实现)
文章平均质量分 78
今天也要写bug、
编程三问:xx是什么?为什么要有xx?xx是怎么实现的?
展开
-
哈夫曼树实现文件压缩
使用哈夫曼树实现文件的压缩和解压缩原创 2022-09-11 00:15:56 · 3540 阅读 · 1 评论 -
跳表的实现
跳表的实现原创 2022-07-24 18:44:24 · 344 阅读 · 0 评论 -
最大网络流之Dinic 算法
Internet Bandwidth原创 2022-07-07 23:05:18 · 192 阅读 · 0 评论 -
AC自动机
AC自动机的使用,主要用来解决长文章或长字符串敏感词的匹配问题原创 2022-06-27 15:18:13 · 301 阅读 · 0 评论 -
IndexTree以及应用
IndexTree的使用原创 2022-06-26 14:40:57 · 451 阅读 · 0 评论 -
线段树以及使用
线段树以及使用原创 2022-06-25 19:19:26 · 463 阅读 · 0 评论 -
Morris遍历
Morris遍历原创 2022-06-23 16:40:50 · 340 阅读 · 0 评论 -
蓄水池算法
蓄水池算法以及应用原创 2022-06-22 22:40:06 · 2720 阅读 · 0 评论 -
最长回文子串问题---Manacher算法
Manacher算法的实现以及用法原创 2022-06-22 14:37:09 · 457 阅读 · 0 评论 -
单调栈以及单调栈的应用
单调栈的实现以及应用场景原创 2022-06-21 00:29:55 · 1277 阅读 · 0 评论 -
C++图的点+边存储结构以及最小生成树、拓扑排序、最短路径算法实现
文章目录图的点+边存储结构插入操作BFS(广度优先遍历)DFS(深度优先遍历)拓扑排序不使用入度的拓扑排序最小生成树Kruskal算法Prime算法最短路径---Dijkstra算法使用加强堆优化Dijkstra算法图的点+边存储结构相对于邻接矩阵和邻接表的结构,图的点+边的存储结构能够存储更多信息,因此更容易获取每个点的入度和出度以及对应的边,方便实现最小生成树、最短路径以及拓扑排序等算法。另外,邻接表和邻接矩阵等存储方式与点+边的存储方式可以相互转化,实现算法接口的复用,所以当传入的参数是邻接表原创 2022-03-08 16:31:46 · 3958 阅读 · 1 评论 -
C++加强堆
文章目录为什么需要加强堆加强堆的具体实现加强堆的基本结构插入push和删除pop操作修改和删除任意值操作附录为什么需要加强堆在08 stack、queue和priority_queue的使用和模拟实现这一章已经实现过堆。但是堆有一些不足,那就是堆不能做到修改堆中元素的值,并且只能删掉头部的值,不能够删除堆中其他的值,因为这样会破坏堆的结构。如果想要不破坏堆的结构也很好办,只需要重新向上或者向下堆的结构即可,但是这样又会有新的问题,那就是修改或删除元素在堆中的位置是未知的,如果想要获取该位置,则需要原创 2022-03-07 22:51:35 · 1214 阅读 · 3 评论 -
Trie(前缀树)
文章目录Trie(前缀树)代码实现(vector和map)Trie(前缀树)前缀树是指:单个字符串中,字符从前到后加到一棵多叉树上。字符放在路上,字节点上有专属的数据项(常见的是pass值和end值,pass表示有多少路径经过该节点,end表示有多少路径以该节点结尾)所有样本都这样添加,如果没有路就新建,如果有路就复用沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1代码实现(vector和map)使用vector:vector适合字符串中字符单一的情况,比如字原创 2022-03-06 13:59:25 · 610 阅读 · 0 评论 -
C++ 图(邻接矩阵和邻接表结构)
文章目录图的基本概念图的存储结构邻接矩阵邻接表图的广度优先遍历图的深度优先遍历代码实现最小生成树Kruskal算法Prime算法最短路径图的基本概念图的存储结构因为图中既有节点,又有边(节点与节点之间的关系),因此,在图的存储中,只需要保存:节点和边关系即可。节点保存比较简单,只需要一段连续空间即可。其边关系一般采用邻接矩阵或邻接表的方式保存。邻接矩阵因为节点与节点之间的关系就是连通与否,即为0或者1,因此邻接矩阵(二维数组)即是:先用一个数组将定点保存,然后采用矩阵来表示节点与原创 2022-02-20 19:50:19 · 5277 阅读 · 5 评论 -
B-树,B+树,B*树
文章目录B-树为什么需要B-树B-树的性质B-树的性能分析代码实现B+树B+树查找的优点B*树B-树为什么需要B-树种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O( log2N)二叉搜索树无要求O(N)二叉平衡树(AVL树和红黑树)无要求O( log2N)哈希无要求O(1)位图无要求O(1)布隆过滤器无要求O(K)(K为哈希函数个数,一般比较小)以上结构适合用于数据量不是很大的情况,如果数据量非常原创 2022-02-19 19:44:52 · 727 阅读 · 0 评论 -
C++并查集
文章目录并查集的原理并查集的实现代码并查集的典型应用并查集的原理在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。并查集一般可以解决以下问题:查找元素属于哪个集合沿着数组表示树形关系以上一直找到根(即:树中中元素为负数的位置)。查看两个元素是否属于同一个集合沿着数组表原创 2022-02-18 15:33:36 · 2793 阅读 · 1 评论 -
红黑树(C++实现)
文章目录一、红黑树的概念1.1. 为什么要有红黑树二、红黑树的性质2.1. 为什么根节点必须为黑色三、红黑树结点的定义3.1. 在节点的定义中,为什么要将节点的默认颜色给成红色的四、红黑树的插入4.1. 调整的三种情况4.1.1. 插入结点的叔叔存在,且叔叔的颜色是红色。4.1.2. 插入结点的叔叔存在,且叔叔的颜色是黑色。4.1.3. 插入结点的叔叔不存在4.2. 代码实现五、红黑树的删除5.1. 待删除的结点只有一个孩子5.2. 待删除的节点没有孩子5.2.1. 如果兄弟是黑色5.2.2. 如果兄弟是红原创 2022-01-08 17:21:40 · 4241 阅读 · 9 评论 -
AVL树(三叉链和二叉链)
文章目录AVL树的基本概念AVL树的基本概念二叉搜索树能够实现高效查找O(logN)。但是遇到特殊情况,比如升序或者降序就会退化为单支树,此时查找的效率就退化到了O(N)。AVL树又称平衡搜索树,它保证了当向搜索树中插入新的节点后,如果能使每个节点的左右子树高度只差绝对值不超过1,即保证了这棵树是平衡的,即有如下特点:左右子树都是平衡的(高度差的绝对值不超过1)如果一棵二叉搜索树的高度是平衡的,它就是AVL树。它的查找效率为logn...原创 2021-11-24 21:13:18 · 690 阅读 · 2 评论 -
二叉搜索树
文章目录一、什么是二叉搜索树1.1. 二叉搜索树查找的时间复杂度二、二叉搜索树的实现2.1. 接口概览2.2. 构造函数和析构函数构造和拷贝构造重载=运算符析构函数2.3. 插入节点的函数非递归实现递归实现2.4. 查找的函数非递归实现递归实现2.5. 删除节点的函数非递归实现递归实现三、二叉搜索树的应用模型及实例3.1. k模型宿舍门禁3.2. KV模型:中英文对应字典统计次数一、什么是二叉搜索树二叉搜索树又称为二叉排序树,是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有结点的值都小原创 2021-11-16 10:49:03 · 5148 阅读 · 1 评论
分享