数据结构与算法
文章平均质量分 96
Vect__
我不爱学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
别再让搜索树变竹竿!AVL 旋转四连招详解!
摘要:AVL树是一种自平衡二叉搜索树,通过平衡因子(右子树高度-左子树高度)确保每个节点平衡因子的绝对值≤1。当插入或删除导致树失衡(平衡因子为±2)时,通过旋转操作(右旋、左旋等)恢复平衡。文章详细分析了AVL树的结构定义、插入逻辑以及旋转操作(以右旋为例),展示了如何通过调整子树高度保持高效操作性能,解决普通二叉搜索树退化为链表的问题,实现O(logn)的时间复杂度。原创 2025-10-30 20:00:53 · 964 阅读 · 48 评论 -
初学二叉搜索树踩坑多?C++ 从原理到代码,搞定增删查全流程
本文介绍了二叉搜索树的基本概念和操作实现。二叉搜索树满足左子树节点值小于根节点值,右子树节点值大于根节点值的特性。文章详细讲解了查找、插入和删除三种核心操作:查找采用二分思想,时间复杂度为O(logn);插入需找到合适位置并保持树结构;删除则根据节点子节点数量分为三种情况处理,重点阐释了删除有两个子节点时的替换策略。通过C++代码示例展示了二叉搜索树类的具体实现方法,包括节点结构定义和各类操作的算法流程。原创 2025-10-27 13:11:16 · 1802 阅读 · 51 评论 -
万字长文带你从0到实战,全面吃透八大排序算法
从底层到实战,图文并茂详解八大排序算法原创 2025-10-10 19:02:45 · 793 阅读 · 27 评论 -
二叉树实战笔记:结构、遍历、接口与 OJ 实战
本文聚焦 “二叉树实战”,系统覆盖从基础到应用全流程。先铺垫树的基础概念(节点度、层次等)及特殊二叉树(满、完全二叉树)特性;再用 C++ 模板实现二叉树节点结构体与类,手搓1-2-3/4-5-6示例树,展示内存组织逻辑。核心解析遍历技术:前中后序递归遍历(根左右 / 左根右 / 左右根)的 “递 - 归” 思想,及层序遍历的队列应用;实战含 LeetCode 题解(单值、相同树、对称树、子树)与常用接口(最大深度、节点总数、k 层节点数、值查找)。原创 2025-10-05 21:01:27 · 1311 阅读 · 45 评论 -
从堆到TopK:一文吃透核心原理与实战应用
本文系统介绍了树和堆的数据结构及其核心原理。主要内容包括:1)树的基本概念与术语,如节点度、层次、深度等;2)二叉树的定义与特殊类型(满二叉树、完全二叉树);3)堆的本质是完全二叉树,分为大顶堆和小顶堆;4)堆的底层实现依赖动态数组和两个核心操作:向上调整(用于插入元素)和向下调整(用于删除堆顶),通过索引关系高效维护堆结构;5)介绍了两种建堆方法的时间复杂度差异。文章通过图示和代码示例详细说明了堆的调整过程,为理解优先队列等高级数据结构奠定了基础。原创 2025-10-04 20:03:43 · 1266 阅读 · 28 评论 -
从直线到环形:解锁栈、队列背后的空间与效率平衡术
本文介绍了两种经典数据结构——栈和队列的底层实现与特性。栈采用后进先出(LIFO)原则,可通过动态数组或链表实现,支持压栈、出栈等高效操作,常用于函数调用、撤销操作等场景。队列遵循先进先出(FIFO)原则,但数组实现会面临"假溢出"问题。为此,文中提出循环队列的解决方案,通过首尾相连提高空间利用率。文章通过C++代码展示了栈和队列的具体实现,并探讨了它们在实际应用中的价值,体现了数据结构从简单到优化的演进过程。原创 2025-10-02 18:28:58 · 962 阅读 · 27 评论 -
链表相关OJ题
思路:创建一个哨兵位指向head,创建一个cur临时指针,遍历链表,遇到等于val的节点跳过即可,最后返回即链表的头节点创建一个哨兵位就避免了讨论head是否为空。原创 2025-09-01 20:35:54 · 1273 阅读 · 18 评论 -
链表漫游指南:C++ 指针操作的艺术与实践
上一章的顺序表底层是数组,封装了增删查改的功能接口成为了顺序表。存储顺序表的空间是连续的,顺序表非常大时,内存可能无法提供这么大的连续空间,由此,链表就被创造了。在一个复杂的系统中,空闲的内存空间散落在内存各处,而链表通过指针很好的链接起了各个分散的内存空间。如图:内存空间分配并不连续,但是指针称为维系各个空间的桥梁。原创 2025-08-23 13:35:07 · 1478 阅读 · 20 评论 -
从零实现自定义顺序表:万字详解 + 完整源码 + 图文分析
刚入门C++数据结构的你,是不是也遇到过这些头疼的问题?想实现一个能灵活存数据的顺序表,却卡在类结构设计上,不知道该用哪些成员变量;好不容易写了插入、删除接口,却总出现数组越界、数据覆盖的 bug;甚至还没搞懂动态扩容的原理,程序就因为内存泄漏崩溃了……原创 2025-08-20 12:39:07 · 1094 阅读 · 15 评论 -
复杂度分析
时间复杂度分析统计的不是算法运行的时间,运行时间和平台环境也有着很大的关系,这个不是我们能控制的,所以,我们。还有个有趣的知识,假设中国十四亿人口,每个人的省份证号按序排列,找一个人最多需要找多少次?常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶。和指数阶相反,对数阶反映“每轮缩减到一半”。平方阶通常出现在嵌套循环中,内外层循环都为。,函数运行时所要的栈帧空间在编译期间已经确定好了,因此。,我们举个例子看一下,假设输入数据大小为。,每轮缩减到原来的一般,循环次数是。原创 2025-08-19 11:31:20 · 852 阅读 · 7 评论
分享