自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 C++ 数据结构之哈希表及其相关容器

本文主要探讨了哈希表及其相关容器的实现原理与应用。文章首先对比了unordered_set/set和unordered_map/map的底层实现差异:前者基于哈希表实现,提供O(1)的平均时间复杂度但无序;后者基于红黑树实现,保持有序但时间复杂度为O(logn)。接着详细解析了哈希表的核心概念,包括哈希函数设计(如除法散列法、乘法散列法)、哈希冲突处理机制(开放地址法和链地址法)以及负载因子控制等。通过代码示例展示了线性探测和二次探测的实现方式,并分析了哈希桶的设计思路。

2025-08-31 16:09:37 327

原创 C++ STL之封装红黑树实现map/set

本文通过分析STL源码,深入解析了红黑树封装map/set的实现机制。首先介绍了源码中map和set头文件的结构,重点解析了红黑树模板参数的设计,特别是KeyOfValue参数的作用。接着详细说明了红黑树结点的修改方案,包括使用模板参数T代替具体类型以支持泛型编程。文章还深入探讨了红黑树迭代器的实现,特别是operator++和operator--的中序遍历逻辑。最后给出了完整的模拟实现代码,包括RBTree.h、my_set.h和my_map.h三个文件,展示了如何通过一棵红黑树同时支持set和map的功

2025-08-29 17:50:58 858 3

原创 C++数据结构之红黑树

红黑树是一种自平衡二叉搜索树,通过颜色规则实现近似平衡。它具有四个基本特征:1)二叉搜索树性质;2)根叶节点为黑色;3)不存在连续红节点;4)任意路径黑节点数相同。插入时通过变色和旋转(单旋/双旋)维护平衡,时间复杂度为O(logN)。相比AVL树,红黑树的平衡要求更宽松,插入删除效率更高,被广泛应用于STL的map/set实现。验证时需检查四条规则:颜色合法性、根节点黑色、无连续红节点、路径黑节点数相同。红黑树通过颜色约束间接实现平衡,在性能和实现复杂度间取得良好平衡。

2025-08-28 17:28:08 884 5

原创 C++数据结构之AVL树详解

AVL树是一种自平衡二叉搜索树,通过平衡因子(BF)控制树高,确保任意节点左右子树高度差不超过1。当插入或删除导致BF超过±1时,通过四种旋转操作(LL、RR、LR、RL)恢复平衡。文中详细介绍了旋转规则和实现方法,并提供了C++代码实现,包括节点结构、插入操作和四种旋转函数。AVL树通过将树结构尽量转化为完全二叉树,优化查询性能为O(logN)。代码部分展示了如何计算平衡因子、检测平衡状态以及执行旋转操作来维护树的平衡性。

2025-08-27 17:31:56 572 3

原创 C++ STL之map/set

本文介绍了C++关联式容器与序列式容器的区别,重点讲解了set和map系列的使用方法。set是基于红黑树实现的唯一键容器,支持快速查找、插入和删除操作,保持元素有序性。map是键值对容器,同样基于红黑树实现,支持通过键快速查找和修改值。文章详细说明了set和map的构造、迭代器使用、增删查等操作,比较了set/multiset和map/multimap的区别,并特别介绍了map的operator[]操作符的多功能特性。最后对pair类型在map中的关键作用进行了说明。

2025-08-26 11:19:43 6075 4

原创 C++数据结构之二叉搜索树

本文系统介绍了二叉搜索树(BST)的概念、特性和实现。二叉搜索树是一种有序数据结构,具有左子树值≤根节点值≤右子树值的特性,其中序遍历会得到有序序列。文章详细阐述了BST的插入、查找和删除操作,指出其时间复杂度在最优情况为O(logN),最差退化为O(N)。接着介绍了两种应用场景:key模型(如停车场系统)和key/value模型(如字典),并分别给出了C++实现代码。最后指出普通BST的性能局限,为后续介绍AVL树和红黑树等平衡二叉搜索树做铺垫。

2025-08-25 15:45:17 571 4

原创 C++面向对象之多态

本文主要探讨了C++中的多态机制,重点分析了运行时多态的实现原理。多态分为编译时多态(函数重载、模板)和运行时多态(虚函数机制),后者通过基类指针/引用调用虚函数实现不同派生类对象的行为差异。文章详细解析了虚函数表(vtable)的工作原理,包括动态绑定过程、虚函数表指针(vptr)的存储位置等关键机制。同时介绍了虚函数重写、协变、析构函数重写等特殊场景,以及override/final关键字的使用。最后区分了重载、重写和隐藏的概念,并阐述了纯虚函数和抽象类的特性。通过买票等实例说明了多态在实际编程中的应用

2025-08-24 16:13:44 1054 4

原创 C++ 面向对象之继承

本文系统介绍了C++中的继承机制,主要内容包括: 继承的基本概念与定义,说明派生类与基类的关系; 派生类与基类的转换规则,重点讲解切片操作; 继承中的作用域问题,包括同名成员隐藏规则; 派生类中默认成员函数的特殊处理规则; 实现不可继承类的两种方法; 静态成员在继承体系中的特性; 多继承与菱形继承问题及其解决方案; 继承与组合的对比分析。 文章通过具体代码示例详细阐述了继承的各类特性,包括访问控制、作用域、构造函数调用顺序等关键问题,并针对多继承带来的复杂性提出了实践建议。最后强调应合理选择继承或组合来实现

2025-08-22 18:56:27 1019 3

原创 C++模板进阶

对模板的特性进行了进一步的深入探讨,并且客观讨论了模板的优缺点

2025-08-21 18:10:17 647 4

原创 C++STL之Stack/Queue详解

本文系统介绍了C++中三种容器适配器的使用与实现:1. Stack(栈):后进先出结构,详解其基本操作(push/pop/top等)、最小栈实现及栈序列验证算法;2. Queue(队列):先进先出结构,说明其操作接口及基于deque的适配器实现;3. Priority_queue(优先队列):堆结构实现,阐述其大/小堆构建方式及自定义类型比较方法。文章还深入分析了容器适配器设计思想(接口简化与底层容器封装)以及deque的核心特性(分块存储与复杂迭代器实现),揭示了其作为stack/queue默认底层容器的

2025-08-19 21:52:29 689 4

原创 C++STL之list详解

本文介绍了C++中list容器的定义、使用和模拟实现。list是带头节点的双向循环链表,支持多种构造方式,包括初始化列表、拷贝构造等。文章详细讲解了list的迭代器实现原理,指出由于链表空间不连续,迭代器需要封装为类类型,并重载相关操作符。在模拟实现部分,展示了结点结构、迭代器类和list类的核心代码,包括插入删除等操作。最后补充了迭代器分类知识,指出list迭代器属于双向迭代器,与vector等容器的随机迭代器存在本质区别。

2025-08-18 11:54:02 776 3

原创 C++ STL之vector详解

介绍了vector的定义以及用法,并重点强调了vector中容易出现的迭代器失效问题,模拟实现了vector,并且详细介绍了vector在二维数组中的各种行为。

2025-08-16 17:37:35 578

原创 C++中的STL标准模板库和string

大致介绍了STL六大组件的基础构成,以及string类的功能及模拟实现

2025-08-13 19:36:32 907

原创 C++模板基础

本文介绍了C++中的泛型编程与模板机制。主要内容包括:1. 泛型编程通过模板实现代码复用,解决了函数重载带来的代码冗余问题;2. 函数模板通过编译器自动推导类型参数,支持隐式和显式实例化;3. 类模板可以创建通用数据结构,实例化时需显式指定类型参数;4. 模板与typedef的区别:模板会生成新类型,而typedef只是创建类型别名。模板机制是C++标准库(STL)的基础,实现了强大的泛型编程能力。

2025-08-12 16:36:12 1021

原创 C/C++内存管理

1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造operator delete: 该函数最终是通过free来释放空间。

2025-08-11 17:39:50 684

原创 C++面向对象及其特性(2)

本文系统介绍了C++中构造函数初始化列表、类型转换、static成员、友元、内部类和匿名对象等核心概念,重点分析了初始化列表的特性及其初始化顺序问题。通过多个代码示例深入讲解了static成员变量的共享特性及其应用场景,友元机制对封装性的突破,以及内部类的作用域和访问权限控制。同时探讨了匿名对象的生命周期特点和编译器对对象拷贝的优化策略,为理解C++面向对象编程的关键特性提供了详细指导。

2025-08-10 20:22:35 563

原创 C++面向对象及其特性

主要讲解面向对象中的类的基础知识和六大默认成员函数

2025-08-09 20:07:31 728

原创 C++语法与面向对象特性(2)

本文章将继续根据一些基本的语法和特性方面介绍C++与C语言的一些不同之处,便于快速入门C++

2025-08-07 20:18:03 365

原创 C++基础语法与面向对象特性

C++基础语法,本篇主要介绍在接触C++时与C语言的一些不同之处,用于快速入门

2025-07-29 22:01:33 658

原创 头歌软工导论作业

软件工程导论头歌答案参考

2025-05-24 19:25:11 512 1

原创 基础排序方法

1.基本思想直接插入排序的实现,我们可以参考扑克牌的排序当我们要将新的牌插入现有牌堆时,保证当前手中的牌堆有序,再将新的牌与牌堆中的值进行比较,在进行比较与交换后,现在的牌堆就有序了。2.具体实现我们先进行单趟排序的实现,假设[0,end]的元素有序,这里即设第一个元素为有序的。此时要进行排序的元素为a[end+1],将该元素依次与现有的有序牌堆进行比较。若当前值小于end处的值,交换。

2025-04-29 17:03:13 1348

原创 二叉树及其基本操作(2)

一些OJ题,详细介绍了二叉树中的递归思想

2025-04-15 16:53:14 356

原创 二叉树的基本功能实现

二叉树的基本操作

2025-04-14 17:45:32 493

原创 头歌软件工程导论UML画图题(基于starUML)

头歌软件工程导论UML画图题答案

2025-04-12 10:41:30 2427 2

原创 头歌数据库【数据库概论】第10-11章 故障恢复与并发控制

数据库头歌实训10-11章客观题答案

2025-04-09 22:34:40 1543 3

原创 栈与队列及其基础应用

栈和队列的定义和实现,并通过一些列题深入了解其特性

2025-04-09 22:23:10 878

原创 二叉树之堆及其应用

树与二叉树的介绍,以及堆的应用,详细介绍了向上调整和向下调整算法

2025-04-08 21:27:42 722 1

原创 第6~7章 关系规范化、E-R转换为关系模型

mysql数据库头歌6-7章选择题

2025-04-05 09:51:02 2260 6

原创 头歌实训MySQL3-5章参考答案(含选填)

头歌数据库MySQL实训3-5章答案参考

2025-03-25 12:12:03 6974 5

原创 C语言预处理

许多C编译器提供了一种能力,允许你在命令行中定义符号,用于启动编译过程。如:定义任意长度数组int main()int i;for(i=0;i<MAX_NUM;for(i=0;i< MAX_NUM;

2024-03-30 12:50:31 2033 1

原创 编译与链接

在ANSI C任何一种实现中,都有两种环境,一个是翻译环境,一个是运行环境。

2024-03-29 17:42:58 615 1

原创 文件操作与数据流

磁盘或者硬盘上的文件称为文件,文件可分为两类,即程序文件和数据文件,本次学习主要学习操作数据文件。

2024-03-24 15:46:35 466

原创 枚举类型和动态内存管理

动态内存管理的基本应用

2024-03-22 18:12:38 1415 1

原创 自定义类型:结构体,联合体

a.位段的“位”指的是二进制位,冒号之后的数字代表的是二进制位的数目,如_a类型只有两个二进制位,只能表示0,1,2,3的十进制数字struct Aint _a : 2;int _b : 5;此时的A就是一个位段类型。那A所占内存大小是多少呢?答案是8个字节(64个bit位)由此看来,位段是一种专门用来节省空间的方法。

2024-03-19 20:59:15 1651 1

原创 整数和浮点数在内存中的存储

但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上 ⼀个中间数,对于8位的E,这个中间数是127;⽐如:0.5 的⼆进制形式为0.1,由于规定正数部分必须为1,即将⼩数点右移1位,则为1.0*2^(-1),其 阶码为-1+127(中间值)=126,表⽰为01111110,而尾数1.0去掉整数部分为0,补齐0到23位。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,⽽数值位最 ⾼位的⼀位是被当做符号位,剩余的都是数值位。

2024-03-16 18:52:34 660 1

原创 string库函数的功能与模拟实现

string.h库函数的功能与模拟实现

2024-03-10 21:28:00 260 1

原创 指针相关知识

一部分c语言指针知识

2024-03-04 22:00:55 159 1

原创 数组练习——二分查找

当我们有一个数组arr[10]={1,2,3,4,5,6,7,8,9,10},我们想要查找这个数组中是否有每个数字,若有则输出下标,我们有什么办法呢?这种算法很容易想到,但是对于有序数组来说,朴素算法的时间复杂度为O(n),我们思考一种更为简便的算法:二分查找。此时arr[mid]=5,是小于我们想要查找的元素7的,于是我们令left指针向右移动一位,并进行第二次查找。在这种算法下,我们只需要将数组中的元素进行遍历,并将元素一一与我们想要的数字进行比较即可。这里我们进行简单分析。(以查找数字7为例子)

2024-02-07 20:18:43 264 1

原创 数组与函数综合练习-扫雷

如图,系统会给出一个9x9或16x16(根据难度的不同可选择不同规格)的棋盘,在方格中随机埋下特定个数的地雷,左键点击方格,有两种情况——踩到雷,此时游戏结束;没踩到雷,并显示以所点开方格为中心的9x9九宫格内的雷的个数。右击鼠标可标记你认为是雷的方格,找出所有雷游戏成功。拟用c语言编写扫雷小游戏,我们准备创建三个文件:test.c:用来编写主页进程;game.c:编写具体的游戏运行法则;game.h:用来进行函数的声明与头文件的使用。3.game.c 游戏的主要实现。二.扫雷游戏的编写逻辑。

2024-01-29 20:59:39 258

原创 C语言分支与循环结构

在九九乘法表中我们显然需要同时对行和列进行控制,于是我们运用嵌套循环,用变量i进行外层即行的控制,用变量j进行内层即列的控制,值得注意的是变量j的循环次数与i的值有关,这是为了保证第一行有一个结果,第二行有两个结果,第三行有三个结果。if-else语句简单来说是一种条件判断语句,根据不同的条件是否符合要求来选择执行某段代码,如上图:当num>ret成立时,执行第一个花括号内的语句,即打印 “猜大了,请重新选择”字样。值得注意的是,在此例子中三个条件是并列关系,可类比数学中的分段函数。若为假,则跳出循环。

2024-01-23 21:43:45 483 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除