数据结构
文章平均质量分 90
对各种数据结构的理解、模拟实现、知识点总结
码达拉
喜欢总结的马达拉先生,大三在校生一枚,欢迎一起探讨知识
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++哈希表:unordered_map与unordered_set全解析
本文介绍了C++中unordered系列关联式容器的底层实现原理。重点分析了unordered_map和unordered_set的哈希表结构,包括哈希冲突的两种解决方法:闭散列(开放定址法)和开散列(链地址法)。文章详细讲解了哈希函数设计原则,并通过代码示例展示了线性探测和链地址法的具体实现。对于闭散列,解释了线性探测的原理和伪删除法的必要性;对于开散列,说明了如何通过单链表解决冲突,并讨论了扩容策略。最后比较了两种方法的优缺点,指出链地址法在存储空间利用上的优势。全文通过大量代码示例,帮助读者深入理解哈原创 2025-08-23 20:51:20 · 1169 阅读 · 0 评论 -
STL关联式容器解析:map与set详解
文章摘要:STL中的关联式容器(如map、set等)与序列式容器的主要区别在于其存储的是键值对结构,采用红黑树实现,具有高效的数据检索能力。文章详细介绍了关联式容器的特性,包括键值对概念、四种树形结构容器(map/set/multimap/multiset)的特点与使用方式,重点分析了set和map的实现原理及接口。最后展示了如何基于红黑树模拟实现map和set,包括迭代器设计、模板参数处理和核心操作实现。关联式容器通过有序存储和高效查找(O(logN)时间复杂度)满足了特定场景下的数据管理需求。原创 2025-08-22 20:41:17 · 1351 阅读 · 1 评论 -
深入解析红黑树:原理与实现
红黑树是一种自平衡二叉搜索树,通过节点颜色(红/黑)和特定规则确保最长路径不超过最短路径的两倍。其核心性质包括:根节点为黑、红色节点不连续、所有路径黑色节点数相同。插入操作分为标准BST插入和颜色调整两步,调整分为多种情况(叔叔节点红/黑)。与AVL树相比,红黑树不追求绝对平衡,插入和旋转次数更少,适合频繁修改的场景。文中提供了完整的C++实现代码,包括节点定义、旋转操作和插入逻辑。原创 2025-08-22 13:21:37 · 959 阅读 · 0 评论 -
AVL树:平衡二叉搜索树的奥秘(手撕代码)
本文详细介绍了AVL树(平衡二叉搜索树)的概念与实现。AVL树通过平衡因子(左右子树高度差绝对值≤1)保证树的平衡性,使查找效率维持在O(logn)。文章重点讲解了AVL树的插入和删除操作:插入时通过四种旋转(左单旋、右单旋、左右双旋、右左双旋)调整平衡;删除操作更复杂,需结合二叉搜索树删除逻辑和平衡因子调整。文中提供了完整的C++代码实现,包括节点结构定义、旋转函数及插入删除接口,并强调了维护父指针和平衡因子的重要性。AVL树通过严格平衡控制,有效解决了普通二叉搜索树退化为链表的问题。原创 2025-08-21 13:43:52 · 1054 阅读 · 0 评论 -
二叉搜索树的实现与应用详解
本文系统介绍了二叉搜索树(BST)的实现与应用。首先阐述了BST的基本概念和性质:左子树节点值均小于根节点,右子树节点值均大于根节点。重点讲解了BST的三大核心操作实现:查找、插入和删除,包括代码实现和不同情况的处理逻辑(如删除节点时的直接删除和替换法)。其次分析了BST的两种应用模型:K模型(纯键值存储)和KV模型(键值对存储),并提供了完整代码实现。最后讨论了BST的性能特点,指出在平衡情况下操作时间复杂度为O(logn),但在最坏情况下会退化为O(n),为后续介绍AVL树和红黑树等平衡二叉搜索树做铺垫原创 2025-08-20 11:35:09 · 1000 阅读 · 0 评论 -
七大排序算法全解析:从入门到精通
本文系统介绍了排序算法概念与实现。排序是将记录按关键字大小排列的操作,分为内部排序(内存中)和外部排序(数据过大)。算法特性包括时间复杂度、空间复杂度和稳定性(相同元素相对位置不变)。重点分析了插入排序(直接插入O(n²)稳定、希尔排序O(n^1.3)不稳定)、选择排序(直接选择O(n²)不稳定、堆排序O(nlogn)不稳定)、交换排序(冒泡O(n²)稳定、快速排序O(nlogn)不稳定)以及归并排序(O(nlogn)稳定)。特别对快速排序的三种实现(挖坑法、左右指针法、前后指针法)和非递归实现进行详解,并原创 2025-08-13 11:39:17 · 1497 阅读 · 0 评论 -
深入解析二叉树(包含堆结构)数据结构
树是一种非线性数据结构,由节点组成层次关系集合,具有根节点、子树、节点度等概念。二叉树是特殊的树结构,每个节点最多有两个子节点,分为满二叉树和完全二叉树。二叉树可以通过顺序存储(数组)或链式存储(链表)实现。堆是一种特殊的完全二叉树,分为大根堆和小根堆,支持插入、删除等操作,时间复杂度为O(logn)。二叉树的遍历包括前序、中序、后序和层序遍历,其中层序遍历需要借助队列实现。原创 2025-08-12 19:35:09 · 1096 阅读 · 0 评论 -
深入解析栈与队列:数据结构基础
本文介绍了栈和队列两种数据结构的基本概念及实现方式。栈是遵循后进先出(LIFO)原则的线性表,支持在栈顶进行压栈和出栈操作,通常使用数组实现更优。队列则是遵循先进先出(FIFO)原则的线性表,在队尾入队、队头出队,采用链表实现效率更高。文中提供了两种数据结构的具体C++模板类实现代码,包含基本操作如push、pop、empty等,并详细说明了各自的特点和适用场景。栈的实现利用了动态数组扩容机制,而队列则采用链表节点连接方式实现。原创 2025-08-12 16:19:20 · 201 阅读 · 0 评论 -
链表的知识总结以及模拟实现
本文介绍了链表的基本概念、分类及实现方法。链表是一种非连续、非顺序的物理存储结构,通过指针实现数据元素的逻辑顺序。文中重点分析了链表的三种分类方式(单向/双向、带头/不带头、循环/非循环),并详细讲解了无头单向非循环链表和带头双向循环链表的实际应用场景。文章还以C++为例,展示了链表的实现过程,包括节点结构定义、链表类的基本操作(尾插尾删、头插头删、查找、指定位置插入删除等)。最后对比了顺序表与链表的区别,突出了链表在动态内存管理方面的优势。原创 2025-08-12 16:00:28 · 336 阅读 · 0 评论 -
顺序表的总结及模拟实现
摘要:本文介绍了线性表和顺序表的基本概念及实现。线性表是n个相同特性数据元素的有限序列,逻辑上线性连续,物理上可离散存储。顺序表采用连续存储单元实现,分静态和动态两种。文章重点使用C++模拟实现动态顺序表,包括初始化、扩容检查、头尾插删、查找修改等功能接口,并分析了顺序表的优缺点:支持高效随机访问(O(1))但插入删除需移动元素(O(N)),扩容可能造成空间浪费。顺序表适合频繁查询场景,其连续存储特性也使其具有较高的存储密度和缓存友好性。原创 2025-08-12 12:08:08 · 1003 阅读 · 0 评论
分享