登录社区云,与社区用户共同成长
邀请您加入社区
在学习红黑树之前,我们首先需要知道它到底解决了什么问题。4/ \2 6/ \ / \1 3 5 7log₂NO(logN)但是普通二叉搜索树并不会主动维护自己的结构。12345O(N)O(N)所以我们需要一种能够自动控制高度的二叉搜索树。AVL 树是一种解决方法,而红黑树则是另一种非常经典的解决方案。红黑树并不像 AVL 树那样严格要求左右子树高度差不超过 1,而是通过一些颜色规则间接约束树的高度
红黑树为什么能够保持近似平衡?插入以后为什么需要变色和旋转?这一篇正式进入代码实现。1. 红黑树结点2. 左旋与右旋3. BST 插入4. 红黑树插入修复5. Find 查找6. 红黑树合法性验证红黑树的代码虽然看起来比较长,但真正复杂的部分其实只有插入修复。第一阶段:BST 插入第二阶段:新结点染红第三阶段:如果父结点为红,修复红红冲突→ 变色→ 向上继续→ 判断 LL / RR / LR /
左子树中的关键字小于根右子树中的关键字大于根左右子树仍然是二叉搜索树借助这个规则,我们可以根据关键字大小决定向左还是向右查找。但是,普通二叉搜索树有一个明显的问题:它只规定了关键字之间的大小关系,却没有限制树的形状。查找7O(log N)O(N)AVL 树就是为了解决这个问题而出现的。普通二叉搜索树↓树高决定操作效率↓限制左右子树高度差↓引入平衡因子↓按照 BST 规则插入↓沿祖先路径更新平衡因子
按照 BST 规则插入↓沿祖先路径更新平衡因子↓平衡因子为 0:停止平衡因子为 ±1:继续平衡因子为 ±2:旋转真正实现 AVL 树时,难点主要集中在旋转。二叉搜索树的大小关系左孩子指针右孩子指针父指针整棵树的根指针局部子树与上一层的连接结点的平衡因子右单旋左单旋左右双旋右左双旋最后给出一套可以直接在 Linux 环境中编译运行的完整 C++ 实现。假设失衡结点为parent说明 parent 左
在学习普通二叉树时,我们主要关注的是树的结构,以及前序、中序、后序、层序等遍历方式。但普通二叉树有一个问题:结点之间没有统一的大小关系。假设现在要在一棵普通二叉树中查找数字13,除了把整棵树遍历一遍,我们通常没有更好的办法。因为站在某个结点上时,并不知道目标应该在左子树还是右子树。较小的数据放在左边较大的数据放在右边正是这条看起来很简单的规则,让树具备了定向查找、插入和删除的能力。这时树的方向会与
int main()students.insert({1003, "张三"});students.insert({1001, "李四"});students.insert({1002, "王五"});return 0;
虽然ptr的类型是Base*编译器如何知道指针实际指向哪种对象?静态绑定和动态绑定有什么区别?什么是虚函数表和虚函数表指针?派生类重写虚函数后,虚表发生了什么变化?为什么含有虚函数的对象可能会变大?为什么构造和析构期间不会调用更派生类版本?如何保存一组不同类型的多态对象?应该在什么时候使用?虚函数会带来多大性能开销?本文主要从底层原理和实际工程使用两个角度,继续讲解 C++ 多态。对象保存虚表指针
继承解决了类之间的代码复用问题,但仅仅有继承,还不能让程序根据对象的实际类型自动执行不同的行为。普通人:全价买票学生:优惠买票军人:优先买票如果程序通过大量if-elsecout << "全价买票" << endl;cout << "优惠买票" << endl;cout << "优先买票" << endl;多态提供了一种更自然的方式:调用者只面向统一的基类接口,具体执行哪个版本,由对象的实际类型决
继承是 C++ 面向对象部分非常重要的一块内容。在学习继承之前,我们已经接触过函数复用、模板复用和 STL。它们解决的都是“相同代码不要重复写”的问题,而继承解决的是类层面的复用。例如,学生和老师都具有姓名、年龄、电话和地址,也都需要进行身份认证。如果分别在Student和Teacher中定义这些成员,不但代码重复,后续修改起来也比较麻烦。继承允许我们把公共部分抽取到一个基类中,再让不同的派生类在
谁在访问文件?他可以对文件做什么?Linux 是一个多用户系统。普通用户的程序Web 服务数据库服务定时任务系统管理工具如果它们都可以不受限制地读取、修改和删除所有文件,系统几乎无法正常管理。文件类型文件拥有者文件所属组拥有者权限所属组权限其他用户权限怎样阅读ls -lLinux 常见文件类型rwx的含义文件权限与目录权限的区别字符权限和八进制权限chmod修改权限chown修改拥有者chgrp修
在数据结构中,栈算是比较容易理解的一种结构。它的规则很简单:最后放进去的元素,最先被取出来。后进先出LIFOC++ STL 已经提供了stack,使用起来并不复杂。但只记住push()和pop()栈为什么只能访问栈顶?pop()为什么不返回被删除的元素?stack为什么没有迭代器?什么是容器适配器?为什么 STL 默认使用deque作为底层容器?如何用已有容器简单模拟一个栈?栈是一种操作受限的线性
set某个关键字是否存在?而实际开发中,我们经常不只是想找到一个关键字,还想找到它对应的信息。英文单词 -> 中文解释学号 -> 学生成绩商品编号 -> 库存数量用户名 -> 用户资料文件名 -> 文件大小这种“一个关键字对应一个值”的关系,称为映射关系。C++ STL 中的map就是用来保存这种关系的有序关联式容器。key :用于查找和排序value :与 key 关联的数据map和set的关系
第一次接触 Linux 时,很多人会觉得它不如 Windows 直观。Windows 中创建文件夹、查看文件和删除目录,通常只需要使用鼠标完成;看起来似乎什么都没有,实际却并不复杂。我现在在哪里?这里有什么?我要对哪个文件或目录做什么?pwd:我现在在哪里ls :这里有什么cd :切换到其他目录touch:创建文件或更新时间mkdir:创建目录rmdir:删除空目录rm:删除文件或目录本文从 Li
派生类构造时,基类部分由谁初始化?拷贝构造和赋值运算符是否需要处理基类?为什么构造顺序是从基类到派生类,析构顺序却正好相反?基类析构函数什么时候必须是虚函数?友元关系和静态成员会不会被继承?多继承为什么会产生二义性?菱形继承为什么会造成数据冗余?虚继承如何让多个路径共享同一个基类子对象?继承和组合到底应该如何选择?这些内容看起来比较分散,实际上都围绕一个核心问题:一个派生类对象中,不仅有派生类自己
这篇博客将从全面讲解数据结构中的单链表概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,每个节点包含两部分:数据域和指针域。数据域用于存储实际的数据,而指针域则存储指向链表中下一个节点的地址。在单链表中,除了最后一个节点外,每个节点的指针域都指向下一个节点,最后一个节点的指针域通常设置为NULL,以标识链表的结束。单链
生活中排队是一件很常见的事。先到的人先接受服务,后到的人排在队尾等待。先进先出FIFOC++ STL 提供了queue容器适配器,可以直接实现队尾入队、队头出队。广度优先搜索二叉树层序遍历任务调度消息缓冲请求排队打印任务管理生产者和消费者模型本文从queue的基本接口开始,逐步讲解它的底层要求、典型应用、两个栈实现队列,以及一个简化版queue的模拟实现。队列是一种操作受限的线性数据结构。push
lspwdcdtouchmkdirrmdirrm掌握这些命令以后,我们已经能够完成最基本的文件创建和删除操作。一个命令的参数忘了怎么办?怎样复制文件和目录?怎样移动文件或者修改文件名?怎样查看一个文本文件?文件有几千行时应该怎样阅读?怎样只查看文件开头或结尾的内容?怎样把一个命令的结果交给另一个命令?怎样查看当前时间?怎样在目录树中查找文件?怎样找到一条命令对应的可执行程序?本文围绕这些问题继续学
在 C++ STL 中,vector和list都是非常重要的序列式容器。如果说vector更像是“可以自动扩容的数组”,那么list更像是“一串用指针连接起来的节点”。很多同学刚学list的时候,会觉得它没有vector好用:不能下标访问,遍历起来还要用迭代器,看起来没有那么直观。但list适合频繁插入和删除插入时不会整体搬移元素删除某个节点时,通常只影响被删除节点对应的迭代器底层结构非常适合帮助
本文介绍的内容可以分成四组。
朋友找不到Z-Library的官网镜像,在这里分享一个目前可用的入口。
本文介绍了C语言的三大基本控制结构:顺序结构、选择结构和循环结构。顺序结构按代码顺序执行;选择结构包括if语句(if、if-else、if-else if-else)和switch语句,用于条件判断;循环结构包括for、while和do-while循环,用于重复执行代码。此外还讲解了break(跳出整个循环)和continue(跳过当前循环)的使用方法。这些结构是C语言编程的基础,合理运用可以简化
Windows Defender误杀软件怎么办?教你两步解决:1.添加文件夹到排除项:进入Windows安全中心→病毒防护→管理设置→添加排除项→选择信任的文件夹;2.关闭智能应用控制:在应用和浏览器控制中关闭该功能。这样既能保留系统防护,又能让常用软件正常运行。建议优先排除整个文件夹而非单个文件,便于管理。
本文摘要: Linux系统操作指南,涵盖文件压缩解压、权限管理、日志查询等常用命令。重点讲解了tar/zip压缩解压操作、chmod/chown权限修改、umask掩码设置,以及gcc编译链接过程。特别详细介绍了Makefile编写规范,包括变量定义、依赖关系、PHONY伪目标等核心概念,并提供了完整的Makefile示例,演示了从源代码编译到清理的全流程。文中还解释了$@、$^、$<等Ma
有真题,有笔记,有总结中级经济师链接:提取码: vjn5高级经济链接:提取码: m4dw2026 经济师考试全指南(中 / 高级)经济师是人社部统一组织的全国统考,、2026 年正在备考期,证书对应初 / 中 / 高级职称,全国通用、可用于落户、积分、评职称、加薪。以下按时间、条件、科目、备考节奏整理,覆盖 2025-2026 完整周期。
无需安装任何App,一个页面聚合抖音、微博、知乎、B站、今日头条、36氪等十几个平台的热搜,没有广告,也没有算法干扰,摸鱼或找选题都好用。专为文案、运营、设计准备的导航站,聚合了数英、梅花网、SocialBeta、新榜以及各种热榜/案例库,一个入口代替几十个书签。中科院出品的高质量科普演讲,每期邀请科学家、学者、艺术家分享前沿内容,没有流量包装,全是硬核知识,可在B站搜“格致论道”收看。支持约20
本文简要介绍了计算机的组成和工作原理。主要内容包括:计算机的核心部件如CPU、主板、内存、硬盘和显卡的功能与作用;冯诺依曼体系结构的基本组成;CPU的性能指标如频率和核心数;以及CPU执行指令的过程,从高级语言到机器语言的转换。文章旨在帮助读者建立对计算机系统的基本认知,为后续JavaEE和web开发学习打下基础。
本文为Linuxdo(L站)社区申请提供实用指南,重点强调申请小作文的写作技巧和避坑要点。核心要求真实具体,突出技术能力和贡献意愿。建议采用三段式结构:开头明确身份和技术方向;中间详述具体技术项目细节;结尾说明能为社区带来的具体贡献。特别提醒要避免5个雷区:未提及L站、内容空洞、涉及无关技术、技术描述笼统、只谈学习不提贡献。最后提供了可直接复用的过审模板,强调"真实具体"是成功
以上30个网站涵盖了信息获取、设计创意、开发辅助、学习提升和实用工具等多个维度。在这个信息过载的时代,优质的工具能够帮助我们过滤噪音、提升效率、激发创意。特别值得一提的是,像REBANG这样的热榜聚合网站,以其极简的设计理念,为我们提供了一个高效获取全网热点的入口。建议读者根据自己的实际需求,选择3-5个最相关的网站深入使用,形成自己的工作流。工具的价值不在于数量,而在于使用频率和熟练程度。正如效
这份PPT以"地震概论"课程为载体,实则系统讲授了股票投资的核心认知、基础知识和实战原则,强调是散户生存的关键,同时警示股市风险,建议不适合者选择定投指数基金或远离股市。
Library Genesis(LibGen)是一个影子图书馆,提供数百万免费电子书、论文和漫画下载,格式包括 PDF、EPUB 和 DJVU。鸠摩搜书是一个强大电子书搜索引擎,整合百度网盘、夸克和图书馆资源,支持跨站搜索 TXT、EPUB、AZW3 等格式。SoBooks 是一个协作式电子书分享平台,支持借阅、搜索和社交功能,覆盖历史、科幻和健康类图书。界面清新,一键切换站点,覆盖期刊、专利和标
股市是融资和资源配置的场所,不是让散户致富的工具。短期是零和博弈,长期持有指数才能分享经济增长红利。真正的门槛是认知,而非开户。散户处于利益金字塔底层,没有信息、资金、制度优势。唯一优势是时间、耐心、了解规律。股市赚钱难,遵循一盈二平七亏损定律。放弃也是一种能力,不是所有钱都该你赚。活下来第一,赚钱第二。仓位管理:334法则,即30%底仓加30%机动加40%现金。买入逻辑:三问,即为什么涨、谁在买