![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 65
阿阿阿顺Yaya
热爱可抵道路漫长。
展开
-
【C++】哈希思想的两种应用实例
所谓位图,就是用一个bit位来标识数据的状态,通常是用于判断某个数据存不存在。如果有40亿个不重复的无符号整数,没排过序。再给你一个无符号整数,如何快速判断这个数是否存在于这40亿个数中呢?位图一般就能很好地处理这种海量数据,且无重复的情景。还有一些问题如下:给定100亿个整数,如何找到只出现一次的整数?给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?这些问题可以考虑使用两个位图来解决。位图除了可以快速查找某个数据是否在一个集合中,还可以用于排序+去重;原创 2023-10-20 15:30:00 · 80 阅读 · 0 评论 -
【C++】unordered_set & unordered_set 的底层封装
一个K类型去做unordered_set/unordered_map的模板参数,一是要求K类型对象。用以取模,或者提供转换成整形的仿函数;二是要求K类型对象可以。一个K类型去做set/map的模板参数,要求K类型对象。,或者显示提供比较的仿函数。,或者提供比较的仿函数。原创 2023-10-18 15:30:00 · 114 阅读 · 0 评论 -
【C++】哈希学习
unordered系列关联式容器是从C++11开始,STL提供的。它的查询效率要更优于set/map类型关联式容器。unordered系列容器的名字是从功能角度来取定的。set/map这类容器,其遍历是有序的,而unordered系列容器的遍历则是无序的。从底层角度来看,set/map类容器底层采用红黑树实现,而unordered系列容器则是采用的哈希结构。同时,map/set的迭代器是双向的,而unordered系列容器是单向的。unordered系列容器的使用可以参考set/map的使用。原创 2023-10-16 16:20:21 · 163 阅读 · 0 评论 -
【C++】set & map 的底层封装
在了解底层封装之前除了对set和map的使用情况要有一定了解,还需要先学习一下二叉搜索树,AVL树,红黑树这些数据结构。原创 2023-10-08 16:00:00 · 118 阅读 · 0 评论 -
【C++】AVL树 & 红黑树
AVL树也是二叉搜索树的一种。因为对于普通的二叉搜索树,当插入的数据在有序或接近有序的情况下,二叉搜索树很可能退化成单支树,导致查找效率低下。而AVL树就很好的解决了这个问题。首先,AVL树是一棵二叉搜索树。同时对于AVL树中每个节点,它的左右子树高度之差的绝对值不超过1。对于有n个节点的AVL树,其搜索时间复杂度可以稳定的保持在Olog2n。为了保证向AVL树中插入节点,仍保持其高度的平衡,可以引入平衡因子(平衡因子:右子树的高度 - 左子树的高度)来处理。原创 2023-10-05 13:09:35 · 151 阅读 · 0 评论 -
经典七大比较排序算法 ·上
选择排序/冒泡排序/堆排序/快速排序/归并排序原创 2023-03-21 17:55:06 · 3320 阅读 · 32 评论 -
经典七大比较排序算法 · 下 + 附计数和基数排序
插入排序/希尔排序/排序特性总结/计数排序/基数排序原创 2023-03-21 17:51:30 · 564 阅读 · 5 评论 -
堆结构的两个应用
堆结构很大的一个用处,就是用于堆排序了,堆排序的时间复杂度是On∗log2n量级的,在众多排序算法中所处的地位也是高手级别的了。这种堆排序方法也能排序,但未免有些不尽人意,没能充分利用堆的优势。虽然时间复杂度达到了On∗log2n,但额外的空间复杂度是On,因为需要先创建一个堆数据结构出来,用于存放要排序的数据。如果是像C++的STL那样堆结构通过容器封装,可以直接拿来用的话还好说;原创 2023-03-14 13:52:06 · 1228 阅读 · 20 评论 -
普通二叉树的操作
但是根节点6的右子树为空,于是路线直接返回到根节点6,此时根节点6所在的子树前序遍历已经完成,所以路线直接返回到根节点4,此时根节点4所在的子树前序遍历已经完成,所以路线直接返回到根节点1,此时根节点1所在的子树前序遍历已经完成,也就是整棵树的前序遍历已经完成了。遍历完成之后,count中存放的数据,就是该树的节点个数了。层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第3层上的节点,以此类推,自上而下,自左至右逐层访问树的节点的过程就是层序遍历了。原创 2023-03-14 13:43:52 · 790 阅读 · 19 评论 -
堆的结构与实现
这里要说明,堆的删除是指删除堆顶的数据。因为和堆顶数据进行交换的数据,现在处于堆顶位置,并不代表它就是堆中最小或最大的数据,堆的结构可能通过交换后就此被破坏。以上只是对一个数据进行的调整,要想实现堆的创建,需要将数组中的所有数据都进行一遍调整(堆顶元素除外),所以可以更进一步,完成一棵完全二叉树到堆的创建。向下调整建堆主要是用于在堆数据结构中,堆在删除数据后,为了继续维持堆的结构,所进行的一种调整。向下调整建堆主要是用于在堆数据结构中,堆在删除数据后,为了继续维持堆的结构,所进行的一种调整。原创 2023-03-11 13:26:10 · 432 阅读 · 18 评论 -
堆(C语言实现)
【代码】堆(C语言实现)原创 2023-03-11 10:44:02 · 107 阅读 · 2 评论 -
树与二叉树(概念篇)
树是一种的数据结构,它是由n(n>=0)个有限节点组成的一个具有层次关系的集合。把它称作树是因为它看起来就像一棵倒挂的树,也就是说它的根在上,而叶在下。原创 2023-03-11 08:52:28 · 470 阅读 · 0 评论 -
链式队列(C语言实现)
【代码】链式队列(C语言实现)原创 2023-03-05 07:55:58 · 85 阅读 · 5 评论 -
顺序表实现栈(C语言)
【代码】顺序表实现栈(C语言)原创 2023-03-04 08:55:59 · 70 阅读 · 1 评论 -
双向带头循环链表
【代码】双向带头循环链表。原创 2023-03-04 08:47:06 · 37 阅读 · 0 评论 -
单链表(C语言实现)
【代码】单链表(C语言实现)原创 2023-03-04 08:30:11 · 48 阅读 · 1 评论 -
【LeetCode】带环链表两道题
给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始如果pos是-1,则在该链表中没有环。pos不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改链表。原创 2023-03-03 09:21:08 · 147 阅读 · 2 评论 -
顺序表(C语言实现)
【代码】数据结构之【顺序表】(C语言实现)原创 2023-03-02 08:27:40 · 59 阅读 · 1 评论