![](https://img-blog.csdnimg.cn/4a065a6d3a0b41b09fb8beafe053e8ff.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 92
数据结构学习之路
CodeWinter
19级,CS专业,一直在努力的路上
展开
-
【二叉树进阶】红黑树(Red Black Tree) - 平衡二叉搜索树
红黑树,是一种平衡二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是 Red 或 Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的。AVL树和红黑树:红黑树更多是一种折中的选择,它舍弃平衡二叉树的严格平衡,换取节点插入时尽可能少的调整。因为红黑树的旋转情况少于AVL树,使得红黑树整体性能略优于AVL树,不然map和set底层怎么会用红黑树呢,包括很多语言的库里面都用了红黑树。如果发明AVL树的人是天才的话,那么发明红原创 2022-06-21 17:42:52 · 3175 阅读 · 2 评论 -
【二叉树进阶】AVLTree - 平衡二叉搜索树
二叉搜索树的插入和删除操作都必须先查找,查找效率代表了二叉搜索树中各个操作的效率。但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度为O(N),因此 map、set 等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡二叉搜索树来实现。最优情况下,有 n 个结点的二叉搜索树为完全二叉树,查找效率为:O(log2N)最差情况下,有 n 个结点的二叉搜索树退化为单支树,查找效率为:O(N)平衡二叉搜索树(Self-balancing binary s原创 2022-06-20 17:20:46 · 2629 阅读 · 0 评论 -
【二叉树进阶】二叉搜索树的结构、实现及应用
普通的二叉树单纯用来存储数据意义不大,还不如用数组和链表。普通数组和链表,面对一些需要频繁查找、插入、删除的场景,也很麻烦。所以这里引入了二叉搜索树。二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:二叉搜索树的结构特点带来的好处:定义二叉搜索树节点类模板:定义二叉搜索树类模板:2.2 默认成员函数的实现2.2.1 构造函数2.2.2 拷贝构造函数(要弄懂)2.2.3 赋值运算符重载(要弄懂)2.2.4 析构函数三、二叉搜索树的相关接口实现3.1 二叉搜索树原创 2022-06-15 21:14:22 · 995 阅读 · 0 评论 -
【数据结构入门】链式二叉树的遍历及相关接口的实现
文章目录前言一、二叉树的链式结构二、二叉树的遍历方式1.1 遍历方式的规则1.2 前序遍历1.3 中序遍历1.4 后序遍历1.5 层序遍历三、二叉树的相关接口实现3.1 二叉树节点个数3.2 二叉树叶子节点个数3.3 二叉树第 k 层节点个数3.4 二叉树的深度(高度)3.5 二叉树查找值为 x 的节点3.6 总结 & 注意四、二叉树的创建和销毁4.1 通过前序遍历的字符串来构建二叉树4.2 二叉树销毁4.3 判断二叉树是否是完全二叉树前言二叉树的顺序结构就是用数组来存储,而「数组」一般只适合表原创 2022-03-01 15:45:27 · 740 阅读 · 3 评论 -
【数据结构入门】堆的应用:TopK & 堆排序
文章目录一、Top-k问题1.1 解法一:暴力排序1.2 解法二:建N个数的堆1.3 解法三:建K个数的堆(最优解法)二、堆排序一、Top-k问题Top-k问题:在 N 个数中,找出前 K 个(最大/最小)的元素,一般情况下数据量 N 都远大于 k。Top-k问题在生活中是非常的常见,比如游戏中某个大区某个英雄熟练度最高的前10个玩家的排名,我们就要根据每个玩家对该英雄的熟练度进行排序,可能有200万个玩家,但我只想选出前10个,要对所有人去排个序吗?显然没这个必要。再比如:专业前10名、世界50原创 2022-02-28 20:03:43 · 3960 阅读 · 6 评论 -
【数据结构入门】堆(Heap)
文章目录一、堆的结构及实现(重要)1.1 二叉树的顺序结构1.2 堆的概念及结构1.3 堆的实现1.3.1 堆的向下调整算法1.3.2 **向下调整算法的时间复杂度**1.3.3 堆的创建(向下调整)1.3.4 堆排序1.3.5 建堆的时间复杂度二、堆的相关接口实现(以大堆为例)2.1 堆的初始化2.2 堆的销毁2.3 堆的插入2.4 堆的删除2.5 获取堆顶元素2.6 堆的判空2.7 拓展1:找出堆中前k个最大元素2.8 拓展2:堆的创建(向上调整)一、堆的结构及实现(重要)1.1 二叉树的顺序结构原创 2022-02-27 16:17:00 · 3803 阅读 · 10 评论 -
【数据结构入门】树、二叉树(Binary tree)
文章目录一、树的概念和结构1.1 树的概念1.2 树的结构 & 相关名词解释1.3 树的表示1.4 树的应用二、二叉树的概念 & 存储结构(重要)2.1 二叉树的概念2.2 特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储结构一、树的概念和结构1.1 树的概念树是一种非线性的数据结构,它是由 n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点原创 2022-02-26 11:46:00 · 812 阅读 · 12 评论 -
【数据结构入门】队列(Queue)详解(定义、销毁、入队、出队等)| 图解数据结构,超详细哦~
文章目录(1)前言1)队列的概念2)队列的结构(2)队列的实现(链式结构)1)队列的定义2)队列的初始化3)队列的销毁4)入队(尾插)5)出队(头删)6)获取队列元素个数7)获取队头元素8)获取队尾元素9)检查队列是否为空数据结构系列文章:【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)【数据结构入门】无头单向非循环链表(SList)详解(定义、增、删、查、改) | 图解链表,超生动详细哦~【数据结构入门】带头双向循环链表(List)详解(定义、增、删、查、改) | 配有大量图原创 2021-09-13 22:28:05 · 18399 阅读 · 15 评论 -
【数据结构入门】栈(Stack)的实现(定义、销毁、入栈、出栈等) | 图解数据结构,超详细哦~
文章目录(1)前言1)栈的概念2)进栈出栈的形式3)栈的存储结构(2)栈的实现(顺序栈)1)栈的定义2)栈的初始化3)栈的销毁4)入栈5)出栈6)检测栈是否为空7)获取栈中有效元素个数8)获取栈顶元素(3)测试栈的功能数据结构系列文章:【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)【数据结构入门】无头单向非循环链表(SList)详解(定义、增、删、查、改) | 图解链表,超生动详细哦~【数据结构入门】带头双向循环链表(List)详解(定义、增、删、查、改) | 配有大量图解,原创 2021-09-11 14:33:23 · 6121 阅读 · 4 评论 -
【数据结构入门】顺序表和链表的区别,以及啥是缓存利用率
文章目录(1)顺序表和链表的区别(2)缓存利用率1)存储器层次结构2)CPU和寄存器、高速缓存,以及主存之间的关系3)缓存利用率(1)顺序表和链表的区别链表和顺序表各有优劣,它们相辅相成顺序表链表存储空间上物理上一定连续逻辑上连续,物理上不一定连续随机访问(用下标访问)支持 [ O(1) ]不支持 [ O(N) ]在任意位置插入或者删除元素可能需要挪动元素,效率低 [ O(N) ]只需要修改指针指向插入动态顺序表,空间不够时需要扩容(扩容可能造成空原创 2021-09-10 17:20:13 · 654 阅读 · 9 评论 -
【数据结构入门】带头双向循环链表(List)详解(定义、增、删、查、改) | 配有大量图解,超详细哦~
文章目录(1)前言(2)带头双向循环链表的实现1)双向链表的定义2)双向链表的初始化3)双向链表的销毁4)打印双向链表5)双向链表的尾插6)双向链表的尾删7)双向链表的头插8)双向链表的头删9)查找双向链表中的元素10)在指定pos位置之前插入元素11)删除指定pos位置的元素12)双向链表的判空13)获取双向链表的元素个数学习双向链表之前,建议先学习下顺序表和单链表,配合这两篇文章食用更佳哦:【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)【数据结构入门】无头单向非循环链表(S原创 2021-09-10 17:18:19 · 2026 阅读 · 7 评论 -
【数据结构入门】无头单向非循环链表(SList)详解(定义、增、删、查、改) | 图解链表,超生动详细哦~
文章目录(1)链表介绍1)为什么引入链表2)链表的概念及结构3)链表的分类(2)无头单向非循环链表的实现1)单链表的定义2)动态申请一个节点3)打印单链表4)单链表尾插5)单链表头插6)单链表尾删7)单链表头删8)在单链表中查找指定值的节点9)单链表在pos位置之后插入10)单链表删除指定pos位置的节点11)单链表删除指定pos位置之后的节点12)求单链表长度13)判断单链表是否为空12)求单链表长度13)判断单链表是否为空学习链表之前,建议先学习下顺序表,配合这篇文章食用更佳哦:【数据结构入门】顺序原创 2021-08-28 00:23:50 · 2376 阅读 · 10 评论 -
【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)
文章目录(1)线性表(2)顺序表1)什么是顺序表2)顺序表的定义2)顺序表的接口实现1、初始化顺序表2、销毁(释放)顺序表3、检查顺序表容量是否满了,好进行增容3、顺序表尾插4、顺序表尾删5、顺序表头插6、顺序表头删7、打印顺序表8、在顺序表中查找指定值9、在顺序表指定下标位置插入数据10、在顺序表中删除指定下标位置的数据11、查看顺序表中有效数据个数12、修改指定下标位置的数据(1)线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结原创 2021-08-18 13:21:32 · 69988 阅读 · 34 评论 -
【数据结构入门】算法的时间复杂度和空间复杂度详解
【数据结构学习之路】算法的时间复杂度和空间复杂度文章目录【数据结构学习之路】算法的时间复杂度和空间复杂度(1)算法效率(2)时间复杂度的计算1)什么是时间复杂度2)大O渐进表示法(估算)3)时间复杂度计算实例4)总结5)一些思考(3)空间复杂度的计算(4)常见复杂度对比本篇前言在C语言阶段,我们学过了一些排序和查找算法,冒泡排序,快速排序,二分查找等等,哪种算法更好呢,我们如何衡量一个算法的好坏呢?本篇来学习算法的时间复杂度和空间复杂度,相信学完后你就会明白了。(1)算法效率算法在编写成可执行原创 2021-07-27 23:59:50 · 3580 阅读 · 6 评论