![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 73
瘦弱的皮卡丘
2018
展开
-
什么是线段树
线段树的概念线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。线段树的应用线段树 segmentTree 是一个二叉树,每个结点保存数组 nums 在区间 [left, right] 的最...原创 2022-04-04 16:59:13 · 1686 阅读 · 0 评论 -
什么是树状数组
首先我们搞明白树状数组是用来干嘛的,现在有一个这样的问题:有一个数组a,下标从0到n-1,现在给你w次修改,q次查询,修改的话是修改数组中某一个元素的值;查询的话是查询数组中任意一个区间 [left,right] 的和。这个问题很常见首先分析下朴素做法的时间复杂度,修改是O (1) 的时间复杂度,而查询的话是O(n)的复杂度,总体时间复杂度为 O(qn); 可能你会想到前缀和来优化这个查询,我们也来分析下,查询的话是O(1)的复杂度,而修改的时候修改一个点,那么在之...原创 2022-04-04 16:58:41 · 852 阅读 · 0 评论 -
什么是拓扑排序
在图论中,拓扑排序是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。并不是所有图都存在拓扑排序,拓扑排序在图中也不是唯一的(通常,一个有向无环图可以有一个或多个拓扑排序序列)。不含环路的有向图必包含入度为零的顶点—因此一定存在拓扑排序拓扑排序的算法实现入度为 0 的顶点 m(及其...原创 2022-03-15 10:12:45 · 802 阅读 · 0 评论 -
C++ 实现LRU缓存机制
实现方法:hashmap+双向链表。我们用一个哈希表和一个双向链表维护所有在缓存中的键值对。双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。哈希表即为普通的哈希映射(HashMap),通过缓存数据的键映射到其在双向链表中的位置。这样以来,我们首先使用哈希表进行定位,找出缓存项在双向链表中的位置,随后将其移动到双向链表的头部,即可在 O(1)的时间内完成 get 或者 put 操作。具体的方法如下:对于 get 操作,首先判断 k.原创 2021-10-26 19:30:46 · 428 阅读 · 0 评论 -
AVL树的删除和插入操作
目录删除操作第一种情况第二种情况第三种情况第四种情况插入操作一.左子树的左子树插入结点二.右子树的右子树插入节点三.左子树的右子树插入节点四.右子树的左子树插入节点删除操作现有如下一颗AVL树,它的中序遍历结果为1,2,3,4,5,6,7,8,9第一种情况删除叶子节点1,节点9,节点4,节点6第二种情况删除非叶子节点,该节点只有左孩子第三种情况删除非叶子节点,该节点只有右孩子第四种情况删除非叶子...翻译 2021-03-13 16:20:32 · 308 阅读 · 0 评论 -
什么是跳跃表。跳跃表的原理及其实现。
目录一.跳跃表的概述二.跳跃表的定义三.跳跃表的查找操作四.跳跃表的插入操作五.跳跃表的删除操作六.补充一.跳跃表的概述话不多说,增加了向前指针的链表就叫作跳跃表。那么跳跃表和普通的单链表有什么区别呢?我们知道,在单链表中查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。 例如,在下图中,我们要寻找值为6的节点,那么我们要经过6次对比。而当我们使用跳跃表时,情况就大有不同。例如,在下图所示的跳跃表中,我们寻找值为..原创 2021-02-22 19:12:22 · 1785 阅读 · 0 评论 -
什么是B+树。B+树的插入。B+树的删除。B+树和B-树的区别。
目录一.B+树的概述二.B+树的插入操作三.B+树的删除操作四.B+树的特点五.为什么说B+树比B树更适合数据库索引?六.B+树的应用一.B+树的概述B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。一棵m阶的B+树的特征与B树大同小异,但是有以下几点需注意:有m个子树的中间节点必有m个元素(B树中是m-1个元素),但每个元素不保存数据,只用来索引; 所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录原创 2021-02-21 19:45:39 · 444 阅读 · 0 评论 -
什么是B-树。什么是B树。B-树的插入。B-树的删除。
首先我们得先明白B-树就是B树,中间的橫线并不是减号。B树是一种多路平衡查找树,它的每一个节点最多包含k个孩子,k被称为B树的阶。k的大小取决于磁盘页的大小。什么是B树的阶 ?上图所有节点中,节点【13,16,19】拥有的子节点数目最多,四个子节点【11,12】【14,15】【17,18】【20,21】,所以可以定义上面的图片为4阶B树。什么是叶子节点?节点【1,2】、节点【11,12】等最后一层都为叶子节点,叶子节点对元素的数量有相同的限制,但是没有子节点,也没有指向子节点的.原创 2021-02-21 19:34:35 · 348 阅读 · 0 评论 -
什么是红黑树,以及如何实现红黑树的插入操作
目录一.前言二.红黑树的概述三.红黑树的插入操作四.红黑树的应用五.代码实现一.前言我们知道按照二叉树排序的特点进行数据的插入,可能会产生以下这种情况:这种情况下,会使二叉排序树的查找性能大打折扣,几乎变成了线性查找,所以为了解决二叉排序树多次插入新节点导致的不平衡问题,诞生了红黑树。二.红黑树的概述红黑树( Red black tree)是一种自平衡二叉査找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树和AVL树类似,都是在进行插λ和删原创 2021-02-20 15:23:05 · 826 阅读 · 1 评论 -
BST | 二叉排序树 | 二叉搜索树
BST树的定义BST树又被称为二叉排序树,二叉搜索树。二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树:每个结点都有一个作为搜索依据的关键码(key),所有结点的关键码互不相同。(即BST树中所有元素的值不允许重复) 左子树(如果存在)上所有结点的关键码都小于根结点的关键码。 右孑树(如果存在)上所有结点的关键码都大于根结点的关键码。 左子树和右子树也是二叉搜索树。例如,下图所示的二叉树就是一个BST树如果对一棵二叉搜索树进行中序遍历,可以按从小到大的顺序,将各结点关键码排.原创 2020-11-25 18:50:03 · 394 阅读 · 0 评论 -
优先队列
何为优先级队列在简绍优先级队列前,我们先来回顾一下普通队列的特点,即“先进先出(FIFO)"。而优先队列不再遵循先入先出的原则,而是分为两种情况:最大优先队列,无论入队顺序,当前最大的元素优先出队。 最小优先队列,无论入队顺序,当前最小的元素优先出队。比如有一个最大优先队列,它的最大元素是8,那么虽然元素8并不是队首元素,但出队的时候仍然让元素8首先出队:为了满足优先级队列这一特性,可以使用大根堆或者小根堆。1.大根堆的堆顶元素是整个堆中的最大元素2.小根堆的堆顶..原创 2020-11-24 19:42:03 · 1080 阅读 · 0 评论 -
二叉堆 | 大根堆 小根堆
何为优先级队列在简绍优先级队列前,我们先来回顾一下普通队列的特点,即“先进先出(FIFO)"。而优先队列不再遵循先入先出的原则,而是分为两种情况:最大优先队列,无论入队顺序,当前最大的元素优先出队。 最小优先队列,无论入队顺序,当前最小的元素优先出队。比如有一个最大优先队列,它的最大元素是8,那么虽然元素8并不是队首元素,但出队的时候仍然让元素8首先出队:为了满足优先级队列这一特性,可以使用大根堆或者小根堆。1.大根堆的堆顶元素是整个堆中的最大元素2.小根堆的堆顶..翻译 2020-11-24 15:19:13 · 2454 阅读 · 0 评论 -
二叉树基础篇
首先定义二叉树节点的结构#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<stack>#include<queue>#define END '#'using namespace std;typedef char ElemType;typedef struct BtNode{ struct BtNode* leftchild; struct BtNode* rightchild;原创 2020-11-22 23:03:27 · 166 阅读 · 0 评论 -
数据结构 | 不定长顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,所以顺序表的存储结构和数组非常类似,而它最显要的特点就是逻辑地址和物理地址都相连。首先我们来看顺序表及相关函数的定义:AlterList.h#pragma once/*#pragma once是一个比较常用的C/C++预处理指令,只要在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次。*/typedef int ElenType;//重命名int为ElenType#define SIZE 10;//不定长顺序表的初始大小原创 2020-07-13 16:05:38 · 221 阅读 · 0 评论