数据结构
文章平均质量分 86
wefg1
keep coding
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】图论基础(BFS/DFS/prim/kruskal/dijkstra/BF/spfa/floyd)
本文系统介绍了图论中的基础算法,包括图的存储方式(邻接矩阵、邻接表)、遍历方法(BFS、DFS)以及各类经典算法:最小生成树的Prim和Kruskal算法、拓扑排序、单源最短路的Dijkstra、Bellman-Ford和SPFA算法,以及多源最短路的Floyd算法。特别强调了不同算法的适用场景(如边权正负情况)和注意事项(如重边处理),并提供了典型模板题的代码实现。通过清晰的算法流程描述和优化技巧分析,为图论问题的解决提供了全面指导。原创 2026-03-05 19:32:41 · 420 阅读 · 0 评论 -
【数据结构】并查集(普通/扩展域/带权并查集)
摘要:本文系统介绍了并查集数据结构及其优化与扩展。首先讲解普通并查集的双亲表示法实现,包括查询(find)、合并(un)和判断(issame)操作,并重点阐述了路径压缩优化。随后介绍扩展域并查集,通过拆分元素为多个域来处理复杂关系,以"敌人的敌人是朋友"为例说明实现方法。最后探讨带权并查集,在普通并查集基础上增加权值信息,详细说明了初始化、查询和合并操作的实现细节,强调需要根据不同题目调整实现方式。全文提供了并查集从基础到进阶的完整知识体系。原创 2026-02-28 18:19:23 · 670 阅读 · 0 评论 -
【数据结构】字典树(也叫trie树/前缀树)
Trie树是一种高效存储和查询字符串的数据结构,利用公共前缀构建树形结构。每个节点记录经过次数(pass)和字符串结尾数(end),支持查询单词出现次数、前缀匹配等功能。实现时使用二维数组tree存储节点路径,数组p和e分别记录经过次数和结尾数。插入时沿路径更新节点信息,查询时遍历路径返回对应统计值。该结构能高效处理字符串相关操作,如查找单词、统计前缀出现次数等。原创 2026-02-27 19:09:07 · 336 阅读 · 0 评论 -
【数据结构】C++的string
本文详细介绍了C++中string类的常见用法和实现原理,主要内容包括: 字符串初始化:演示了空构造、字符串构造、字符填充构造等多种初始化方式 字符串操作:详细说明了增删改查、比较、拼接等常用操作,包括push_back、append、insert、erase等函数 字符串遍历:介绍了下标访问、迭代器遍历和范围for循环三种遍历方式 容量管理:讲解了reserve和resize函数的区别及使用场景 字符串查找:说明find和rfind函数的使用方法 类型转换:介绍了数字与字符串相互转换的to_string和原创 2025-07-16 14:46:41 · 1055 阅读 · 0 评论 -
【数据结构】C++的vector
C++ vector容器详解 vector是C++标准库中的动态数组容器,相比原生数组,它能够自动管理内存并动态调整大小。vector内部使用连续存储空间,支持随机访问,在末尾插入/删除元素效率较高(O(1)),但在中间操作效率较低(O(n))。 核心特性: 动态扩容策略:vs按1.5倍增长,g++按2倍增长 迭代器失效问题:扩容、插入、删除等操作可能导致迭代器失效 常用操作:push_back/pop_back、insert/erase、sort排序等 模拟实现要点:三个指针标记存储空间(_start/_原创 2025-07-18 09:42:06 · 2825 阅读 · 0 评论 -
【数据结构】C++的list
本文主要介绍了C++中list容器的使用和实现原理。文章首先讲解了list的构造函数、迭代器和常用操作,包括正向/反向迭代器、splice函数和remove函数的使用方法。重点分析了list迭代器失效问题,指出删除操作会导致指向被删除节点的迭代器失效,并给出了正确使用迭代器的示例代码。文章还通过对比vector容器,详细展示了list的模拟实现过程,包括节点类、迭代器类和list类的定义,涵盖了构造、析构、插入、删除等核心功能的实现细节。通过这段代码可以清晰地理解list作为双向循环链表的数据结构特点及其操原创 2025-07-21 18:02:13 · 471 阅读 · 0 评论 -
【数据结构】C++的优先级队列(priority_queue)
本文介绍了优先级队列(priority_queue)的概念和特性。优先级队列是一种容器适配器,其首元素始终是最大值,底层通常使用vector实现堆结构。文章详细说明了优先级队列的使用方法,包括创建大堆和小堆的示例代码。重点讲解了仿函数的概念及其优势:保持状态、参数传递灵活、模板编程支持、内联优化和多态行为。最后提供了一个模拟实现的优先级队列代码框架,包含adjustup和adjustdown等关键操作来维护堆结构。该实现支持自定义容器类型和比较方式,展示了优先级队列的核心功能实现原理。原创 2025-08-08 14:35:19 · 785 阅读 · 0 评论 -
【数据结构】链表练习
可以使用快慢指针:fast 一次走两步,slow 一次走一步。当 fast == NULL(偶数个结点)或者 fast->next == NULL(奇数个结点)就停止,返回 slow。给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。1、一次性定义多个指针时,第二个及以后的指针名前面都要加 *。2、while( )括号内是循环继续的条件。要求:只遍历一遍链表。原创 2025-02-23 12:50:42 · 373 阅读 · 0 评论 -
【数据结构】位图和布隆过滤器
本文探讨了两种高效处理海量数据查询的方法。位图法适用于无符号整数查询,通过比特位映射实现O(1)时间复杂度的存在性判断(40亿数约需512MB内存)。布隆过滤器则扩展了位图功能,通过多个哈希函数处理字符串查询,具有空间效率高的特点(m≈4.3*n),但存在误判可能。文章还介绍了哈希切分技术解决超大文件交集问题,通过哈希分片使相同元素必然落入同编号文件,实现内存友好的精确查询。三种方法分别适用于不同场景:位图处理精确数值查询,布隆过滤器适合允许误判的字符串存在性检测,哈希切分则用于超大规模数据的精确匹配。原创 2025-11-09 14:50:12 · 764 阅读 · 0 评论 -
【数据结构】unordered 系列容器底层结构和封装
哈希容器对比与实现原理 摘要:无序容器(unordered_set/map)基于哈希表实现,提供平均O(1)的查找性能,但元素无序且迭代器可能失效;有序容器(set/map)基于红黑树实现,保持O(logn)的稳定查找性能,元素有序且迭代器稳定。哈希冲突解决方法包括开放定址法(线性/二次探测)和链地址法(哈希桶),其中哈希桶通过链表解决冲突更高效。哈希函数设计直接影响性能,常用方法包括直接定址和除留余数法。实现时需考虑扩容机制(负载因子0.7-0.8)、模板特化处理不同键类型,以及迭代器的正确实现。封装un原创 2025-11-08 15:34:26 · 945 阅读 · 0 评论 -
【数据结构】C++的map和set
本文介绍了STL中关联式容器map和set的实现原理与使用方法。关联式容器通过键值对存储数据,采用红黑树作为底层结构,具有高效的数据检索能力。文章详细分析了set和map的特性:set存储唯一元素,map存储键值对;两者都支持迭代器遍历和使用insert操作。重点探讨了红黑树的实现机制,包括迭代器设计、插入操作处理,以及map和set在底层实现上的差异。通过模拟实现RBTree、set和map类,展示了关联式容器的核心功能,如元素插入、遍历和平衡维护。这些容器通过严格的有序存储和高效的查找性能,在C++编程原创 2025-08-14 10:24:16 · 1117 阅读 · 0 评论 -
【数据结构】红黑树
红黑树是一种平衡二叉搜索树,通过颜色标记和五条规则维护近似平衡。规则包括:根节点黑色、红色节点不连续、任意路径黑节点数相同。相比AVL树,红黑树插入删除效率更高,查找性能稍差但差别可忽略。插入操作分两步:按二叉搜索树规则插入后调整颜色和旋转。调整分情况处理,包括变色和单旋/双旋操作。红黑树验证需检查颜色规则和黑高一致性,确保最长路径不超过最短路径两倍。红黑树适合频繁修改场景,其近似平衡特性在性能和实现复杂度间取得良好平衡。原创 2025-11-05 13:38:55 · 1293 阅读 · 0 评论 -
【数据结构】AVL树
本文介绍了AVL树的基本原理和实现细节。AVL树是一种自平衡二叉搜索树,通过维护节点的平衡因子(左右子树高度差不超过1)来保证查询效率。文章详细阐述了AVL树的节点结构、插入操作(包括四种旋转调整方式:左旋、右旋、左右旋和右左旋)以及验证方法。AVL树适合查询频繁但数据相对静态的场景,其时间复杂度为O(logN)。文中还提供了C++的模拟实现代码和调试技巧,包括验证平衡性和正确性的方法。最后给出了两个测试用例来验证AVL树的实现效果。原创 2025-10-12 16:07:57 · 1336 阅读 · 0 评论 -
【数据结构】完全二叉树叶子结点数量的计算
5. 第10层的490个节点是由第9层的 \( \lceil 490 / 2 \rceil = 245 \) 个节点生成的。2. **层数的计算错误**:在计算树的层数时,可能会混淆 \( 2^h \) 和 \( 2^h - 1 \)。4. **度为1的节点数的假设**:在验证时,可能会忽略完全二叉树中度为1的节点数最多为1的情况。3. **对于任何二叉树,度为0的节点(叶子节点)数 = 度为2的节点数 + 1**。2. **高度为h的二叉树最多有2^h - 1个节点**(即满二叉树的情况)。原创 2025-03-31 10:56:33 · 814 阅读 · 0 评论 -
【数据结构】二叉树
本文系统介绍了树和二叉树的基本概念、结构及操作实现方法。主要内容包括:1. 树的基本概念和表示方法,重点讲解了孩子兄弟表示法;2. 二叉树的性质、存储结构和实现,包括顺序存储和链式存储;3. 堆的概念、实现和堆排序算法;4. 二叉树的遍历方式(前序、中序、后序、层序)及实现;5. 二叉搜索树的概念和基本操作(查找、插入、删除)。文章详细讲解了各种数据结构的实现细节,并分析了相关算法的时间复杂度,为理解和应用树形数据结构提供了全面的理论基础和实践指导。原创 2025-03-22 10:22:37 · 1370 阅读 · 0 评论 -
【数据结构】栈和队列
栈和队列的基本概念和实现原创 2025-03-08 10:45:47 · 429 阅读 · 0 评论 -
【数据结构】链表与顺序表的比较
链表与顺序表各有千秋,链表不能完全替代顺序表。原创 2025-03-01 09:47:34 · 467 阅读 · 0 评论 -
【数据结构】链表的带环问题
本文分析了链表环检测问题的两种解法:1)快慢指针法证明:当快指针每次走两步,慢指针走一步时,两者必然在环内相遇;2)环入口节点定位方法:基于快慢指针相遇后,分别从头节点和相遇点同速出发,最终会在入口节点相遇。文章还讨论了快指针步数大于2时可能无法相遇的情况,并给出了两种代码实现方案:直接双指针法和转化为相交链表解法。最后提到可以使用哈希表unordered_set来检测环入口节点。原创 2025-02-27 12:23:00 · 1289 阅读 · 0 评论 -
【数据结构】链表
链表的概念、分类和实现原创 2025-02-25 11:56:24 · 1296 阅读 · 0 评论 -
【数据结构】复杂度
时间复杂度和空间复杂度原创 2025-02-15 20:12:14 · 1605 阅读 · 0 评论
分享