自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ <多态>详解:从概念到底层实现

本文系统介绍了C++多态的核心概念与实现机制。主要内容包括:多态的定义与分类(编译时/运行时多态)、实现条件(继承+虚函数重写)、虚函数与协变规则、override/final关键字用法、纯虚函数与抽象类特性。重点剖析了多态的底层原理(虚函数表指针和动态绑定机制),并通过典型面试题解析多态行为。最后强调多态作为面向对象编程的核心特性,能显著提升代码扩展性和维护性,是C++开发者必须掌握的重要知识。

2025-07-24 22:31:49 943

原创 Linux 基本指令

本文档详细介绍了Linux系统中11个常用命令的使用方法,包括cp、mv、more、less、head、tail、date、cal、find、which和alias指令。每个命令都包含语法说明、功能描述、常用选项及实际应用样例。其中重点讲解了文件操作命令如cp的复制功能及-r递归选项,mv的重命名和移动功能;文件查看工具more/less的分页显示和搜索功能;head/tail的文件首尾显示;date/cal的时间显示功能;find的文件查找功能;which的命令路径查询以及alias的别名设置功能。文档通

2025-07-23 12:10:43 702

原创 C++ <继承> 详解

本文详细解析了C++继承机制的核心特性。内容涵盖:1)基础语法与public/protected/private三种继承方式;2)子类构造、拷贝构造和析构函数的调用规则;3)成员隐藏现象及解决方法;4)静态成员、友元关系的继承特性;5)多继承与菱形继承问题及虚继承解决方案。重点分析了继承中的访问控制、构造顺序、同名成员处理等关键问题,并指出实践中应优先使用public继承,避免菱形继承以提升代码可维护性。通过示例代码展示了C++继承的具体实现方式及其注意事项。

2025-07-21 21:45:30 1221

原创 Linux 基本指令详解

本文介绍了12个常用的Linux基础命令及用法示例:1)pwd显示当前目录路径;2)ls查看目录内容(含-l、-a等参数);3)cd切换目录;4)mkdir创建目录;5)rmdir删除空目录;6)touch创建文件;7)cp复制文件/目录;8)rm删除文件/目录;9)cat查看文件内容;10)whoami/who查看用户信息;11)date/cal显示日期日历;12)man查看命令手册。这些命令涵盖了Linux系统的基本文件操作、目录管理和信息查询功能,是日常使用Linux的基础。建议通过实践练习来掌握这些

2025-07-20 19:53:31 528

原创 【C++ STL 库】解析stack、queue、priority_queue类

通过自我实现可以看出,STL 中的 stack、queue 和 priority_queue 都是基于其他容器的适配器。它们通过封装底层容器的接口,提供了特定的数据结构功能,既保证了功能的正确性,又提供了灵活性(可自定义底层容器)。理解这些适配器的实现原理,有助于我们更好地使用它们,并且在需要时能够自己实现类似的数据结构。

2025-07-12 17:56:24 790

原创 [C++ STL] list类的刨析及简易实现

本文详细解析了C++ STL list类的用法及实现方法。首先介绍了list的基本构造、元素插入删除和遍历操作等库函数用法。重点剖析了自我实现list类的关键部分,包括节点结构、迭代器设计(通过模板参数实现普通和const迭代器复用)以及list类的主要功能实现(如构造函数、插入删除操作等)。通过对比STL实现和自定义实现,深入讲解了双向链表的底层原理,为理解STL容器和自定义数据结构提供了重要参考。该实现完整展示了list的核心功能,包括节点管理、迭代器操作和内存处理等关键技术。

2025-07-10 19:03:44 915

原创 [C++ STL库] 类vector剖析及自我简易实现

vector是 C++ STL 中一个非常实用的容器,它结合了数组的高效随机访问和动态大小调整的优点。通过深入了解vector类的特性、方法和实现细节,我们可以更好地使用它来解决实际问题。同时,自我实现vector类可以帮助我们更深入地理解其工作原理,但在实际开发中,建议优先使用 STL 提供的vector类,以获得更好的性能和可靠性。

2025-07-07 10:07:07 1110

原创 C++ 中 string 类的解析及简易自我实现

本文介绍了C++标准库中的string类功能及其实现原理,并详细解析了如何自行实现一个简易的string类。内容包括:1)标准string类的基本功能和示例;2)自定义String类的架构设计,包含内存管理、迭代器、构造函数等核心组件;3)具体功能实现,如字符串修改、查找、比较运算符重载等;4)测试用例展示。该实现模拟了标准库接口,采用动态内存管理,通过reserve方法优化性能,并提供了类似std::string的操作体验,有助于深入理解字符串处理的底层机制。

2025-06-22 14:15:42 955 1

原创 C++ 函数模板与类模板

C++模板编程解析:函数模板与类模板本文详细介绍了C++中的模板编程技术,包括函数模板和类模板。函数模板通过template<class T>声明通用函数,支持自动类型推导和显式实例化两种方式。类模板则允许创建处理不同数据类型的通用类,必须显式实例化。以Stack类为例,展示了模板在实现动态数组、扩容操作等场景中的应用。模板技术能显著提高代码复用性和可维护性,是C++编程中的重要特性。文章通过代码示例详细解析了两类模板的基本概念、实现方法和使用场景。

2025-06-17 18:45:09 1284 1

原创 深入理解 C++ 内存管理:从分区到 new/delete

摘要:C++内存管理是编程核心,涉及栈、堆、数据段等不同分区。其中堆内存需程序员手动管理,使用new分配内存并初始化对象,delete释放内存并调用析构函数。相比C语言的malloc/free,new/delete更安全智能。常见内存问题包括泄漏、悬空指针和重复释放,可通过智能指针或规范操作规避。理解内存分区特性及正确使用new/delete是编写高效稳定C++程序的关键。

2025-06-16 16:09:05 1203

原创 深入剖析 C++ 默认函数:拷贝构造与赋值运算符重载

本文深入探讨了C++类的默认函数、拷贝构造函数和赋值运算符重载。编译器会自动生成默认构造函数、析构函数、拷贝构造函数和赋值运算符,但当类包含指针等资源时需要手动实现深拷贝。拷贝构造函数通过对象引用创建副本,避免无限递归;赋值运算符用于已有对象间的值传递,应返回引用以支持连续赋值。文章以Date类为例,展示了如何合理使用这些特性,强调对资源管理类需手动实现拷贝控制,而对简单类则可依赖编译器默认实现。掌握这些概念是编写健壮C++程序的关键。

2025-06-12 15:44:40 1492

原创 C++ 类的定义与构造 / 析构函数解析

类是用户自定义的数据类型,封装了数据(成员变量)和操作这些数据的函数(成员函数)。类的定义以关键字。

2025-06-09 22:25:38 1497

原创 C++ 基础特性深度解析

本文聚焦 C++ 命名空间、缺省参数等基础特性,与 C 语言进行对比,阐述 C++ 在增强语言表达和编程便利性上的优势。以下是生成的摘要:C++ 脱胎于 C 语言,为提升代码可维护性、复用性与安全性引入诸多特性。本文对比 C++ 命名空间、缺省参数、引用、内联函数、函数重载五大特性与 C 语言的差异:C++ 命名空间可划分全局作用域,解决命名冲突,而 C 语言缺乏类似机制;C++ 支持缺省参数,C 语言需定义多函数实现相似功能;C++ 引用作为变量别名用于函数传参,比 C 语言指针更安全简洁;C++ 内联

2025-06-06 22:54:58 1093

原创 归并排序:实现文件归并

本文介绍了一种处理大规模数据排序的外部排序方法。当数据量超过内存容量时,通过分块排序和逐步归并的方式实现有效排序。主要步骤包括:生成随机数据文件;将大文件分块排序到临时文件;通过归并函数将有序小文件合并为最终有序文件。代码实现了数据生成、分块排序、文件归并等功能,使用qsort进行内部排序,并采用循环归并策略。该方法克服了内存限制,适用于大数据处理场景,通过多次文件读写操作完成排序任务,体现了分治思想在实际问题中的应用。

2025-06-06 13:47:49 749

原创 算法篇 八大排序(冒泡 插入 选择 堆 希尔 快排 归并 计数)

本文详细介绍了八大经典排序算法:冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序和计数排序。对每种算法从思路、时间复杂度、空间复杂度、稳定性等方面进行分析,并提供了完整的代码实现。特别针对快速排序介绍了两大优化策略:三路划分和自省排序。文章还附带了力扣排序训练题,建议读者通过实践加深理解。不同排序算法各具特点,在实际应用中应根据数据特征选择合适的算法,如小规模数据用插入排序,大规模数据用快速排序或堆排序,范围集中的整数用计数排序等。

2025-06-05 17:22:40 1957 1

原创 快速排序(Quick Sort)算法详解(递归与非递归)

本文介绍了快速排序算法的原理与实现。该算法采用分治策略,通过选择基准元素进行分区,递归排序左右子数组,平均时间复杂度为O(nlogn)。文章详细解析了双指针法的代码实现,并提出了两种优化方案:三数取中法避免有序数组的最坏情况,以及小区间优化改用插入排序减少递归深度。测试显示算法能高效处理10万级数据量。快速排序作为实用高效的内排序算法,经过适当优化后可进一步提升性能表现。

2025-06-03 21:16:38 1348 1

原创 二叉树的层序遍历与完全二叉树判断

本文介绍了二叉树的层序遍历和完全二叉树判断的实现方法。通过队列数据结构,实现了按层次顺序访问节点的层序遍历算法,其核心步骤是将根节点入队,然后依次取出队头节点并访问,同时将其子节点入队。对于完全二叉树判断,采用改进的层序遍历方法:遇到第一个空节点后检查队列剩余节点是否全为空。文章详细展示了相关代码实现,包括队列操作、二叉树的层序遍历及完全性判断函数,并提供了测试用例。这些算法在数据库索引等实际应用中有重要作用。

2025-06-02 16:44:58 633

原创 数据结构二叉树:从理论 代码实践到OJ实战

在BTree.h}BTNode;这里使用BTDataType来表示节点存储的数据类型,在本实现中为char类型。每个节点包含一个数据元素data以及分别指向左子树和右子树的指针left和right。本文介绍了二叉树的基本概念,并通过具体的代码实现了二叉树的创建、遍历以及一些常用操作。二叉树作为一种重要的数据结构,其递归的特性使得许多操作的实现变得简洁而高效。通过对代码的分析和实践,我们可以更好地理解二叉树的工作原理和应用场景。

2025-06-01 16:20:03 1143

原创 堆与堆排序及 Top-K 问题解析:从原理到实践

堆是一种基于完全二叉树的数据结构,分为大堆(父节点≥子节点)和小堆(父节点≤子节点),其核心特性支持高效插入、删除和获取极值操作(O(log n))。堆排序通过建堆和调整堆实现高效排序(O(n log n))。Top-K问题利用堆结构快速获取海量数据中的前K个极值(O(n log K))。堆适用于内存排序、大数据分析和实时监控等场景,其高效性在大规模数据处理中尤为突出。

2025-05-31 20:36:41 1152

原创 使用队列实现栈和使用栈实现队列

本文介绍了如何使用队列实现栈和用栈实现队列的方法。对于队列实现栈,采用两个队列q1和q2,入栈时插入非空队列,出栈时将元素转移至空队列后弹出最后一个元素,时间复杂度O(1)入栈/O(n)出栈。对于栈实现队列,使用两个栈s1和s2,入队时压入s1,出队时将s1元素转移至s2后弹出,实现先进先出,时间复杂度O(1)入队/均摊O(1)出队。文章提供了完整的C语言代码实现,并分析了两种方法的复杂度,帮助读者理解栈和队列的相互转换原理及实际应用。

2025-05-26 13:12:23 726

原创 数据结构队列:从理论到代码实现

本文介绍了队列(Queue)这一基础数据结构及其实现。队列遵循先进先出(FIFO)原则,支持入队、出队、获取队头/队尾元素等基本操作。文章通过C语言代码展示了队列的链式实现,包括定义队列结构体、初始化、销毁、入队、出队等核心函数的具体实现,并提供了测试用例验证功能。队列在任务调度、消息传递等场景具有重要应用价值,理解其实现原理有助于开发高效算法和系统。

2025-05-25 19:40:26 801

原创 数据结构 栈的详细解析

本文详细介绍了栈(LIFO)数据结构的概念和C语言实现。栈包含入栈(push)和出栈(pop)两个核心操作,以及判空、获取栈顶元素等辅助功能。通过头文件定义栈结构体(ST)和相关操作函数,实现文件完成初始化、销毁、动态扩容等具体功能,测试文件验证了栈的正确性。文章重点分析了动态扩容机制(初始容量为4,每次扩容翻倍)的实现细节,并通过示例代码展示了栈的基本使用流程。这种实现方式保证了栈可以高效处理任意数量的元素,为函数调用、表达式求值等应用场景提供了基础支持。

2025-05-25 19:35:23 1115

原创 随机链表的复制问题详解与代码实现

本文介绍了如何对一个带有随机指针的链表进行深拷贝。首先,通过在原链表的每个节点后插入新节点来创建复制链表,并设置新节点的next和random指针,确保其指向关系与原链表一致。接着,通过尾插法连接新节点并恢复原链表结构。此外,文章还提出了一种更高效的解法——哈希表映射法,通过建立原节点与新节点的一一映射关系,快速设置新节点的指针。该方法通过两次遍历和哈希表映射,确保了深拷贝的正确性和完整性。在实际开发中,需根据编程语言特性选择合适的数据结构,并注意内存管理。

2025-05-22 18:19:30 925

原创 探索数据结构的时间与空间复杂度:编程世界的效率密码

数据结构是计算机科学中构建高效算法的基石,而时间复杂度和空间复杂度则是评估算法效率的关键指标。时间复杂度描述算法执行时间随输入规模增长的趋势,常见类型包括常数时间O(1)、线性时间O(n)、对数时间O(logn)、平方时间O(n²)和指数时间O(2ⁿ)。空间复杂度则评估算法执行过程中临时占用的存储空间大小,常见类型有常数空间O(1)和线性空间O(n)。在实际编程中,程序员需要在时间复杂度和空间复杂度之间进行权衡,通过选择合适的数据结构和优化算法来提升性能。掌握复杂度分析技能,能够帮助程序员在设计阶段避免性能

2025-05-21 22:21:19 1378

原创 C语言 贪吃蛇小游戏的实现

本文详细解析了使用C语言实现的贪吃蛇游戏代码,代码结构包含三个文件:test.cpp、snake.h和snake.cpp。test.cpp负责游戏的测试逻辑,snake.h包含头文件引用、宏定义、类型声明和函数声明,snake.cpp则实现了这些函数,涵盖游戏的初始化、运行和结束等功能。代码通过链表表示蛇的身体,使用Windows API控制光标位置更新游戏界面,并处理用户输入、游戏状态判断和内存管理。此代码是一个适合初学者学习和理解控制台游戏开发的示例。

2025-05-18 15:23:38 1049

原创 单链表的运用:原理、实现与实践

本文深入探讨了单链表的原理、实现及其在计算机科学中的实际应用。单链表由一系列节点组成,每个节点包含数据域和指针域,这种结构使得链表在插入和删除操作上具有较高的效率。文章详细介绍了单链表的基本操作,包括创建新节点、打印链表、插入和删除操作,以及查找操作,并通过代码示例帮助读者更好地理解和运用单链表。此外,文章还探讨了单链表在实现栈和队列、内存管理以及图的邻接表表示中的实际应用。通过本文的介绍,读者可以对单链表的原理、实现和应用有更深入的理解,并在实际编程中根据需求选择合适的数据结构。

2025-05-17 13:28:51 517 1

原创 C 语言中运用顺序表编写简易通讯录

本文详细介绍了如何使用C语言中的顺序表来实现一个简单的通讯录程序。通讯录程序包括添加、删除、修改、查找和显示联系人等基本功能。顺序表是一种线性表,通过数组实现,具有随机访问元素的优点,但插入和删除元素时效率较低。项目中定义了顺序表和联系人信息的结构体,并实现了相应的操作函数,如初始化、插入、删除等。主函数提供了一个菜单供用户选择操作,程序通过动态内存分配管理数据。通过这个项目,读者可以巩固C语言知识,并了解顺序表的基本操作和应用。

2025-05-14 12:47:03 684 1

原创 深入理解 C 语言中的动态内存分配与指针变量

本文探讨了C语言中动态内存分配与指针变量的结合使用,重点介绍了malloc、calloc和realloc三个动态内存分配函数。malloc用于分配指定大小的内存块,calloc在分配内存的同时将其初始化为0,而realloc则用于调整已分配内存块的大小。通过指针变量,程序可以直接操作这些动态分配的内存,提升灵活性和性能。文章还强调了使用动态内存时的注意事项,如内存泄漏、空指针检查和重复释放等问题,以确保程序的健壮性。合理运用这些技术,可以编写出高效且灵活的C语言程序。

2025-05-08 23:01:02 1016 1

原创 C 语言结构体与结构体指针:简易动态链表解析

在C语言中,结构体和结构体指针是数据组织和管理的关键工具。结构体允许将不同类型的数据组合成一个新的数据类型,便于管理和操作。例如,可以定义一个包含姓名、年龄和成绩的学生结构体,并通过结构体变量访问和修改这些数据。结构体指针则是指向结构体变量的指针,通过指针可以间接访问和修改结构体成员,提高程序效率,特别是在处理大型结构体或传递结构体参数时。动态链表是一种常见的数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针。通过结构体和结构体指针,可以实现动态链表的创建、插入、打印和释放等操作,展示它们在动态

2025-05-08 21:38:40 460 1

原创 深入理解 C 语言指针:从内存到实战的全面解析

本质:指针是地址的载体,是 C 语言直接操作内存的利器。关键规则类型决定解引用权限和运算步长。const用于限定指针操作权限。野指针需通过初始化、边界检查和及时置空规避。传址调用是函数间数据修改的核心手段。

2025-04-28 08:00:00 2094 1

原创 【C 语言入门】从零开始:彻底理解 C 语言函数的本质与实战

完整声明格式返回值类型 函数名(参数列表) {// 函数体:执行语句[return 表达式;] // 可选,无返回值时省略(返回值类型为void)关键组成部分返回值类型可以是基本类型(intcharfloat)、指针类型或void(无返回值)。必须与return语句表达式类型一致(可自动隐式转换,如对int返回值类型,会截断为3函数名遵循标识符规则(字母 / 数字 / 下划线,不能以数字开头),建议用动词 + 名词命名(如参数列表可包含多个参数,用逗号分隔,每个参数需指定类型(如。

2025-04-26 00:52:49 816 1

原创 从零开始:简易扫雷游戏及代码实现全解析

扫雷游戏的棋盘是一个由方块组成的网格,其中部分方块下面隐藏着地雷。玩家的目标是在不触碰到地雷的情况下,揭开所有没有地雷的方块。地雷:如果点击到的方块下面是地雷,游戏失败。数字:如果点击到的方块下面不是地雷,方块会显示周围 8 个方块中地雷的数量。当所有没有地雷的方块都被揭开时,游戏胜利。通过以上的分步解析,你应该对扫雷游戏的代码实现有了更深入的理解。每个部分都有其特定的功能,通过相互协作,实现了一个简单的扫雷游戏。整个程序结构清晰,分为头文件、主函数文件和功能函数文件,便于维护和扩展。

2025-04-25 11:58:07 1052 1

原创 【编程基础】读懂C数组:从定义到应用场景的全面解析

内存连续性:成就了 O (1) 随机访问的高效性;指针本质:揭示了 C 语言直接操作内存的底层哲学;静态特性:要求开发者对数据规模有清晰预判,避免越界等低级错误。

2025-04-22 21:35:30 1216 1

原创 C 语言分支循环语句详解:从基础到实践

在 C 语言的世界里,分支循环语句就像是程序的 “大脑中枢”,它赋予了程序决策和重复执行的能力,让代码不再是单调的线性执行,而是能够根据不同条件灵活应对,高效完成各种复杂任务。无论是开发一个简单的计算器,还是构建庞大的系统级程序,分支循环语句都是不可或缺的基石。分支语句的作用是根据不同的条件执行不同的代码块,实现程序的选择性执行。if语句是最基本的分支语句,用于判断一个条件是否成立,并根据判断结果执行相应的代码。除了基本形式,if语句还可以和else结合,实现二选一的分支逻辑:​。

2025-04-21 20:12:53 885 2

空空如也

空空如也

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

TA关注的人

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