邪王真眼大战数据结构
文章平均质量分 94
从入门到进阶,再到高阶,手把手教你学会数据结构,
一颗青果
向更好的编程技能前进!
展开
-
[C++]哈希应用之位图&布隆过滤器
我们之前学习了哈希表,哈希表通过映射关系,实现了O(1)的复杂度来查找数据,哈希在实践中是一个非常重要的思想,今天要学习的就是哈希思想的两大应用:位图与布隆过滤器。原创 2024-04-09 19:12:35 · 1162 阅读 · 22 评论 -
【C++进阶】用哈希实现unordered_set和unordered_map的模拟
之前我们学完红黑树后对他进行了改造,使之成为map和set的底层容器,今天我们则要把哈希表进行修改并以此为基础实现。原创 2024-04-08 21:32:30 · 814 阅读 · 8 评论 -
【C++进阶】哈希表(哈希函数、哈希冲突、开散列、闭散列)
首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表(又称哈希桶)中。比如中的场景,现在需要插入元素44,先通过哈希函数计算哈希地址,hashAddr为4,因此44理论上应该插在该位置,但是该位置已经放了值为4的元素,即发生哈希冲突。那如何寻找下一个空位置呢?当负载因子越大,哈希冲突的概率就越大,同时发生哈希踩踏的概率也越大,对于开放定址法,应该控制负载因子小于0.7,超过0.7则扩容。原创 2024-04-08 02:17:23 · 1136 阅读 · 23 评论 -
【C++进阶】带你手撕红黑树(红与黑的爱恨厮杀)
我们可以认为事先建造好一颗纯黑节点的满二叉树,再在两个黑节点之间插入红节点,则理论最长路径就是一黑一红交替,不超过最短路径的二倍。,不得不惊叹于他那近乎绝对的平衡,然而也惋惜于插入删除效率的低下,今天要讲的红黑树则是以相对的平衡换来了插入删除效率的大幅提高,可谓是各有千秋。4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)3. 如果一个节点是红色的,则它的两个孩子结点是黑色的。2. 检测其是否满足红黑树的性质。原创 2024-04-04 13:40:47 · 655 阅读 · 4 评论 -
双链表的基本知识以及增删查改的实现
之前我们对单链表进行了非常细致的剖析,现在我们所面临的则是与之相对应的双链表,我会先告诉诸位它的基本知识,再接着把它的增删查改讲一下,ok,正文开始。我们上一篇也说了。链表一共有八种,具体可以看下文。【单链表实现通讯录(增删查改) - CSDN App】http://t.csdnimg.cn/EABuy我们之前所说的单链表指的是不带头不循环单向链表,而双链表则是带头循环双向链表,只要会了这两个,那八种链表就都会了。二.为什么引入双链表?原创 2024-01-30 22:50:53 · 587 阅读 · 8 评论 -
单链表实现通讯录(增删查改)
前言之前写了很多次通讯录,一次比一次复杂,从静态到动态,再到文件操作,再到顺序表,今天要好好复习一下单链表,于是乎干脆用单链表再写一遍。首先我们之前已经用单链表写过他的增删查改了,于是乎,我们应该在此基础之上进行修改,而不是从头开始写,先把之前的增删查改拿出来。原创 2024-01-29 21:09:35 · 760 阅读 · 1 评论 -
数据结构之单链表详解
之前大摆了5天多,没怎么学编程,自昨日起,觉不可如此,痛定思痛,开始继续学习,昨天刷了20多道简单级别的力扣,今天想把链表好好巩固一下,于是乎,把单链表的增删查改搞了出来,还用单链表写了通讯录,等下写完博客在去和双链表缠斗一番,ok,王子公主请看下文。//不对劲////////!链表的结构跟⽕⻋⻋厢相似,淡季时⻋次的⻋厢会相应减少,旺季时⻋次的⻋厢会额外增加⼏节。与顺序表不同的是,链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点/节点”是带头双向循环链表。构的⼦结构,如哈希桶、图的邻接表等等。原创 2024-01-29 20:46:49 · 642 阅读 · 2 评论 -
数据结构之使用顺序表写出通讯录
int age;注意注意,重点来了,我们定义了一个结构体,它包含了通讯录联系人的种种信息例如姓名,性别,年龄,电话和住址,接着我们又给结构体换了个名字——SLDataType它是个英文缩写,即Sequence List Data Type,顺序表数据类型,ok回想一下上一篇文章,我们所用的顺序表数据类型是int,当时也是给他换成了这个名字,如此一来,之前我写的函数就不会因为类型改变而要再全部改一遍了。int size;}SL;原创 2024-01-22 22:41:37 · 1272 阅读 · 0 评论 -
数据结构之顺序表的增删查改
假如我们每次扩2个或3个,那很容易就会不够,扩容很频繁,导致性能消耗,如果一次扩1000个,2000个又很容易空间浪费,但如果我们以倍数扩容,随着空间越来越大每次增加的空间也会越来越大,这样扩容就不会很频繁,浪费空间也不会很多,我们通常是采用2倍扩容或1.5倍扩容,至于为什么是这俩数字就涉及到数学原理了,我能力有限,无法作答。ok,至此,我们知道了什么是顺序表,顺序表的增删查改四种功能我们也都实现了,可以说是迈出了相当大的一步,下一次我们将会在此基础上实现通讯录,但是在物理结构上并不⼀定是连续的,原创 2024-01-21 22:48:55 · 2522 阅读 · 5 评论