
数据结构
文章平均质量分 80
CR0712
welcome to C
展开
-
位图和布隆过滤器
在学习过哈希之后,我们对于哈希其实理解哈希可以通过与计数排序联系起来。哈希的本质其实就是将数据与下标位置对应起来,所以我们就有了unordered_map和unordered_set的出现。但是当我们如果是对数以万计的数据进行统计的话呢,那么还是用hash来辅助嘛。其实哈希的缺陷型就是空间换时间,哈希本身的消耗其实就是相当大的,因为哈希底层实际就是顺序表+单链表的存储结构。所以我们可以借助哈希的思路另寻路径。也就是我们要谈到的位图以及布隆过滤器。原创 2023-11-29 15:02:16 · 449 阅读 · 0 评论 -
哈希表的认识与实现
可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。所以当我们设置这种数据结构时主要就是要找好与建立好关系。但是我们插入数据的映射关系可能并不是一一对应的,也可能是多对一的关系也称为。所以说我们就要想办法解决这些多个插入数据对应一个插入位置的数据(哈希冲突)的问题,因此我们就有对应的。哈希函数可以帮助我们将插入数据与插入位置关联起来,原创 2023-11-24 21:13:56 · 506 阅读 · 1 评论 -
map和set的简易封装(纯代码)
【代码】map和set的简易封装(纯代码)原创 2023-11-17 10:38:27 · 147 阅读 · 0 评论 -
对红黑树的理解与实现(C++实现)
每个节点要么是红色,要么是黑色。根节点是黑色。叶子节点(NIL节点)是黑色的。(此叶子结点指的是空节点)如果一个节点是红色的,则它的两个子节点都是黑色的。(不能有连续的两个红节点)对于每个节点,从该节点到其后代叶子节点的所有路径上,包含相同数量的黑色节点。原创 2023-11-13 21:22:00 · 146 阅读 · 0 评论 -
AVL树的插入详解
_kv(kv)//pair内部有实现自己的拷贝构造函数,_bf(0){}int _bf;//每个节点的平衡因子(right-left)class AVLpublic:AVL(){}private:首先我们要知道AVL树的数据类型一般都是K-V型,具体说也就是pair类型,而且AVL树和一般的树据关联是不同的,属于三叉连,也就是不仅仅要有左右指针还要有父指针,而父指针的目的就是在插入数据的时候可以更方便的处理祖宗节点的平衡因子。平衡因子的计算:右子树的高度—左子树的高度。原创 2023-11-09 19:33:19 · 362 阅读 · 1 评论 -
归并排序递归与非递归
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。原创 2023-07-15 11:12:58 · 444 阅读 · 2 评论 -
快排的三种方法
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。原创 2023-07-12 13:07:43 · 5209 阅读 · 0 评论 -
希尔排序:从插入排序到优化的艺术
希尔排序其实就是一种插入排序,实际上就是通过直接插入排序一步步改进优化而实现的原创 2023-06-29 16:45:14 · 911 阅读 · 0 评论 -
二叉树中大小堆的实现
其实堆就是一种特殊的二叉树结构(完全二叉树),但是堆实现排序相较于冒泡排序是相当快的,并且堆也可以迅速的找出一堆数据中的前几个最值,而堆恰恰就是用顺序表数组来实现的,所以就先来了解一下二叉树顺序结构。原创 2023-05-31 13:01:05 · 670 阅读 · 0 评论 -
树与二叉树的概念结构与操作
讲到二叉树之前,我们要先了解一下什么是树,首先树也是一种数据结构,只不过与栈和队列不同,树并不是线性表的一种,因为树的结构组成并不是直线型的,是有分支的。原创 2023-05-28 23:19:44 · 955 阅读 · 0 评论 -
栈和队列的实现
栈也是线性表的一种,但是栈只允许在固定的一端进行插入与删除数据,而进行插入与删除的一端同意称为栈顶,而另一端就称为栈底。简称:后进先出。压栈(push):将数据插入栈顶。出栈(pop):将栈顶的数据删除。队列同样也是线性表的一种,队列就像食堂打饭一样,前面的打好饭先走,新来的同学站在后面排队。即:只允许在一端进行插入数据,而另一端进行删除数据。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。原创 2023-05-15 21:30:49 · 765 阅读 · 0 评论 -
单链表的实现
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表与我们通讯录中的顺序表是不同的,顺序表的空间是连续的,像数组一样可以通过下标访问。链表是通过指针将一块块结构体(节点)串起来,前一个节点存放着指向后一个节点的地址。原创 2023-04-22 22:24:01 · 581 阅读 · 2 评论 -
空间复杂度
空间复杂度:是对一个算法在运行过程中空间复杂度和时间复杂度的表示方法是一样的,也使用,计算规则基本相似。空间复杂度计算的并不是程序占用的字节大小,而是变量的个数。大O符号(Big O notation):是用于描述函数渐进行为的数学符号。推导大O阶方法:1、用常数1取代运行时间中的所有加法常数。2、在修改后的运行次数函数中,只保留最高阶项。3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。原创 2023-04-12 19:58:50 · 984 阅读 · 3 评论