自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深度剖析 C++ vector的底层实现

摘要 本文深入剖析了C++ STL中vector容器的底层设计与实现原理。重点解析了vector的三大核心指针_start、_finish、_end_of_storage的协同工作机制,通过指针关系判断容器状态,实现高效的内存管理和随机访问。详细介绍了迭代器的原生指针实现方式及其失效场景,包括扩容导致的指针失效问题。文章还探讨了vector的多重构造函数设计,包括默认构造、初始化列表构造和填充构造,特别分析了初始化列表优化策略和类型重载的必要性。

2025-11-15 23:25:04 1080 10

原创 力扣(LeetCode) ——43.字符串相乘(C++)

给定两个非负整数字符串num1和num2,要求返回其乘积字符串。双重循环逐位计算乘积并处理进位、去除前导零等。最终代码展示了完整的C++实现过程,通过模拟竖式乘法的方式,将每位乘积结果存入数组并处理进位问题,最后将中间结果转换为字符串输出。

2025-11-12 22:58:19 535 6

原创 力扣(LeetCode) ——209. 长度最小的子数组(C++)

使用滑动窗口算法,通过双指针动态调整窗口大小:右指针扩展窗口累加和,左指针在满足条件时收缩窗口以优化长度。时间复杂度为O(n),空间复杂度O(1)。最终返回最小长度或0(无解时)。题目链接可供练习。

2025-11-08 18:11:48 304 5

原创 C++ string 类完整实现:带着问题吃透每一个细节

C++ string类实现解析与核心设计 本文深入解析C++ string类的底层实现,揭示其作为STL特殊容器的设计特点。string通过动态字符数组存储数据,包含_str、_size和_capacity三个核心成员变量,区分有效长度与容量以提升效率。文章详细剖析了构造函数、拷贝构造、赋值运算符等关键功能的"现代写法"优化技巧,包括利用swap实现异常安全和代码复用。同时分析了reserve扩容机制、内存管理注意事项,以及npos特殊值的实现原理。通过工业级代码示例,展示了string

2025-11-08 17:29:03 1269 7

原创 力扣(LeetCode) ——15.三数之和(C++)

解题思路包括:1)排序预处理;2)固定一个元素后使用双指针寻找匹配的另外两个元素;3)去重处理避免结果重复。通过双指针优化,算法时间复杂度为O(n²),空间复杂度O(log n)。

2025-10-27 22:34:24 871 1

原创 力扣(LeetCode) ——5.最长回文子串(C++)

通过中心扩展法,分别处理奇数和偶数长度的回文情况。算法遍历字符串的每个字符,以当前字符为中心向两边扩展,比较字符是否相同,直到找到最长的回文子串。最终代码实现了这一思路,通过循环和条件判断找出最长回文子串。

2025-10-22 00:59:06 341 1

原创 力扣(LeetCode) ——118.杨辉三角(C++)

杨辉三角的特点是每个数等于它上方两数之和。解题思路是初始化二维数组全为1,然后通过双重循环计算每个位置的值(i从第2行开始,j从第1列开始,每个元素等于上一行同列和前一列元素之和)。

2025-10-20 23:30:58 414 2

原创 力扣(LeetCode) ——11.盛水最多的容器(C++)

暴力解法时间复杂度为O(n²),而更优的双指针解法只需O(n)时间。双指针法通过从两端向中间移动,每次移动较短边的指针,计算当前面积并更新最大值。最终代码简洁高效,使用双指针可以在一次遍历中找到最大盛水面积。

2025-10-19 23:44:47 331 5

原创 探索 C++ 类 核心概念与不同场景下的使用技巧

本文系统讲解了C++面向对象编程中的几个进阶概念:初始化列表、类型转换、静态成员、友元机制、内部类、匿名对象以及对象拷贝优化。重点解析了初始化列表的三种必用场景、explicit关键字的作用、静态成员的使用规范、友元的封装控制、内部类的特性、匿名对象的生命周期,以及编译器对对象拷贝的优化机制。这些概念虽零散但实用,能显著提升代码效率和可读性,建议合理运用这些特性来优化C++程序设计。

2025-10-19 16:54:36 962

原创 力扣(LeetCode) ——611. 有效三角形的个数(C++)

题目要求统计数组中能构成三角形的三元组个数。解法一暴力枚举所有组合,时间复杂度O(n³)。更优解法是先排序数组,使用双指针法:固定最大边,用双指针判断较小边之和是否大于最大边,通过移动指针统计有效组合,将时间复杂度优化至O(n²)。核心思路是利用排序后的单调性,通过指针移动高效计算满足三角形不等式的组合数。

2025-10-14 00:37:39 313 1

原创 力扣(LeetCode) ——217. 存在重复元素(C++)

本文介绍了如何判断数组中是否存在重复元素的问题。通过先对数组排序,再检查相邻元素是否相同的方法,可以高效地解决问题。

2025-09-15 23:49:57 377 3

原创 C++类(上)默认构造和运算符重载

本文介绍了C++类的默认成员函数和运算符重载的核心概念。默认成员函数包括:构造函数(用于对象初始化,支持重载和缺省参数)、析构函数(自动释放资源)、拷贝构造函数(通过已有对象初始化新对象,区分浅/深拷贝)和拷贝赋值运算符(对象间赋值操作)。运算符重载部分详细讲解了如何通过operator关键字重载运算符,包括返回引用(用于修改左操作数)和返回值(生成新结果)的不同场景,以及自增/自减运算符的前后置实现差异。

2025-09-11 14:06:11 931 3

原创 力扣(LeetCode) ——101. 对称二叉树(C语言)

通过递归比较左右子树,若两者同时为空则返回true,若仅一个为空或节点值不等则返回false。最终代码实现了这一逻辑,先判断根节点是否为空,再递归检查左右子树的对称性。

2025-08-31 18:45:01 274 10

原创 简易留言系统

摘要: 本文介绍了一个简易网页留言系统的实现,使用JavaScript和localStorage存储数据。系统功能包括:用户输入留言内容(限制500字符)、自动保存到本地存储、按时间排序显示留言、支持清空全部留言、字符计数提醒等。代码实现了HTML转义防止XSS攻击,并添加了淡入动画和通知提示提升用户体验。通过DOM操作和事件监听,构建了一个响应式的留言界面,所有数据在浏览器关闭后仍可保留。

2025-08-31 14:49:30 486 2

原创 力扣(LeetCode) ——645. 错误的集合(C语言)

解题思路是使用辅助数组标记已出现数字,计算实际总和与理想总和的差值来定位错误。具体实现:1)用calloc分配标记数组;2)遍历时发现重复值记录;3)通过总和差值计算丢失值。时间复杂度O(n),空间复杂度O(n)。示例输入[1,2,2,4]输出[2,3],[1,1]输出[1,2]。该方法高效直观地解决了集合错误问题。

2025-08-30 22:58:03 522 2

原创 C++世界的大门——基础知识总结

本文介绍了C++的基础知识,包括第一个程序的编写、命名空间的使用、输入输出方法以及缺省参数等内容。C++兼容C语言语法,同时支持面向对象和泛型编程,通过命名空间解决命名冲突问题,并通过流操作符简化输入输出。缺省参数功能允许函数在调用时省略部分参数,提高代码灵活性。这些特性使C++成为系统级开发的首选语言之一。

2025-08-30 22:35:36 6627 3

原创 力扣(LeetCode) ——965. 单值二叉树(C语言)

摘要: 单值二叉树是指所有节点值相同的二叉树。解题思路是递归遍历树的每个节点,比较其与左右子节点的值是否一致。若为空树返回true,否则递归检查左右子树。代码实现简洁,通过递归调用确保整棵树为单值结构。该问题可在LeetCode上练习。

2025-08-28 20:06:38 252

原创 排序(Sort)方法详解(冒泡、插入、希尔、选择、堆、快速、归并)

这篇文章系统介绍了常见的排序算法:冒泡排序、插入排序、希尔排序、选择排序(包括基础版和优化版)、堆排序、快速排序、以及归并排序。每种算法都从核心思想、代码实现(C语言)、动态演示和特点分析四个维度进行详细讲解。其中,冒泡排序通过相邻元素比较实现排序;插入排序采用构建有序序列的方式;希尔排序是插入排序的高效改进版;选择排序通过选择极值元素完成排序;堆排序则利用堆数据结构实现高效排序。文章还通过时间复杂度和稳定性分析比较了各算法的优劣,并提供了可视化演示链接帮助理解算法执行过程。

2025-08-28 09:55:42 1976 3

原创 力扣(LeetCode) ——100. 相同的树(C语言)

摘要 本文介绍了如何判断两棵二叉树是否相同的算法。通过递归方法,首先处理两树都为空或一个为空的情况,然后比较根节点值,最后递归检查左右子树是否相同。代码简洁高效,时间复杂度O(n)。

2025-08-18 20:36:51 297 1

原创 《数据结构》——二叉树从概念到代码的详解

本文介绍了树和二叉树的基本概念与实现方式。树是一种层次结构的数据结构,包含根节点、子树、叶节点等基本元素,具有度、层次等属性。二叉树是每个节点最多有两个子树的特殊树结构,分为满二叉树和完全二叉树两种特殊类型。重点讲解了二叉树的顺序存储结构(数组实现)及其堆的应用,包括大根堆和小根堆的特点、存储规则(通过数组下标计算父子节点位置)以及堆的基本操作实现(插入、删除、建堆等)。

2025-08-18 15:41:18 1091 1

原创 力扣(LeetCode) ——142. 环形链表 II(C语言)

本文介绍了检测环形链表入口节点的算法。通过快慢指针法,当快指针fast(每次移动两步)与慢指针slow(每次移动一步)在环中相遇后,将其中一个指针重置到链表头部,然后两个指针以相同速度前进,再次相遇点即为环的入口节点。该算法时间复杂度为O(n),空间复杂度为O(1),能高效解决环形链表检测问题。

2025-08-16 23:13:56 294

原创 力扣(LeetCode) ——622. 设计循环队列(C语言)

本文介绍了两种实现循环队列的方法。第一种方法通过额外开辟一个空间来解决队空和队满的冲突问题,使用head和tail指针分别指向队首和队尾的下一个位置。第二种方法通过维护一个size变量来判断队列是否为空或满,无需额外空间。两种方法都实现了队列的基本操作:入队、出队、获取队首/队尾元素以及判断空/满状态。代码采用C语言实现,包含完整的内存管理,能够正确处理循环队列的各种边界情况。两种实现方式各有优缺点,第一种方法空间利用率稍低但逻辑简单,第二种方法更节省空间但需要额外维护size变量。

2025-08-16 23:02:15 423

原创 力扣(LeetCode) ——225 用队列实现栈(C语言)

本文介绍了如何使用两个队列实现栈的功能。通过定义队列结构及其基本操作(入队、出队、获取队首/队尾元素等),作者构建了一个由两个队列组成的栈结构。关键思路是:在入栈操作时始终将元素插入非空队列;在出栈操作时,将非空队列的前n-1个元素转移到空队列,最后弹出剩下的元素。该实现保证了栈的后进先出特性,同时提供了完整的栈操作接口(创建、入栈、出栈、获取栈顶、判空和销毁)。时间复杂度分析表明,出栈操作需要O(n)时间,而其他操作均为O(1)。

2025-08-14 16:43:47 322

原创 《数据结构》——轻松掌握队列(Queue)

本文详细介绍了队列数据结构及其实现。队列遵循"先进先出"原则,支持在队尾插入元素(入队)和队头删除元素(出队)操作。文章通过C语言代码展示了链式队列的实现,包括初始化、销毁、插入、删除、获取队头/队尾元素、判空和获取元素个数等基本操作。队列在任务调度、消息队列、广度优先搜索和缓冲区管理等领域有广泛应用。

2025-08-14 16:08:15 954

原创 【数据结构】——栈(Stack)的原理与实现

本文介绍了栈的基本概念、核心优势及代码实现。栈是一种后进先出的线性表,支持高效的时间复杂度操作(O(1)),包括压栈、出栈、取栈顶等。其动态扩容策略和内存管理优化使其在程序设计中具有重要作用。文中详细展示了栈的C语言实现,包括结构定义、初始化、入栈、出栈等核心操作,并提供了完整代码示例。栈作为程序运行时内存管理的核心区域之一,合理使用可提升程序效率,但需注意避免溢出风险。

2025-08-13 20:42:33 1474 2

原创 力扣(LeetCode) ——有效的括号(C语言)

摘要: 本文介绍了一个判断括号是否有效的算法。通过使用栈结构,遇到左括号时入栈,遇到右括号时检查栈顶元素是否匹配。若不匹配或栈为空则返回false,最终检查栈是否为空来确定括号有效性。代码实现了栈的基本操作,并在遍历字符串后验证括号匹配情况。该算法的时间复杂度为O(n),空间复杂度为O(n),能有效处理'(', ')', '[', ']', '{', '}'等括号组合的验证。

2025-08-13 20:34:34 347

原创 力扣(LeetCode) ——移除链表元素(C语言)

本文介绍了如何从链表中移除所有值等于给定val的节点。解题思路是创建一个虚拟头节点newHead,然后遍历链表,当遇到节点值等于val时修改指针跳过该节点。代码实现中,使用malloc分配新节点空间,通过while循环遍历链表,比较节点值并调整指针指向,最终返回修改后的链表头节点.

2025-08-12 19:12:59 261

原创 【数据结构】——顺序表链表(超详细解析!!!)

顺序表和链表是两种基本的线性表实现方式。顺序表使用连续存储空间,支持随机访问但插入删除效率低;链表通过指针连接节点,插入删除高效但需要额外空间存储指针。本文详细介绍了顺序表的C语言实现,包括初始化、增删查改等操作,并分析了其优缺点:优点是随机访问快,缺点是插入删除时需要移动大量元素。通过动态扩容机制解决了固定大小的问题,但空间利用率仍存在优化空间。代码实现部分展示了顺序表的核心操作,为后续学习链表打下基础。

2025-08-12 16:02:20 1415 2

原创 力扣(LeetCode) ——合并两个有序数组(C语言)

给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n。

2025-07-29 18:02:48 297

原创 C语言——结构体指南(小白一看就懂!!!)

本文详细介绍了C语言中结构体的概念、语法和使用方法。结构体是一种自定义的复合数据类型,可以将不同类型的数据组合在一起。文章讲解了结构体的基本特点、声明方式、成员访问方法以及内存对齐规则。通过示例说明了结构体内存布局的计算方式,并解释了内存对齐的原因和优化建议。

2025-07-29 16:24:41 1315

原创 力扣(LeetCode) ——轮转数组(C语言)

本文介绍了两种解决轮转数组问题的方法。第一种方法通过多次单步轮转实现,时间复杂度为O(n*k),空间复杂度O(1)。第二种方法更为高效,采用三次反转策略:先反转前n-k个元素,再反转后k个元素,最后整体反转,时间复杂度O(n),空间复杂度O(1)。

2025-07-23 22:54:17 389

原创 【数据结构】——时间与空间复杂度深度解析

本文系统介绍了算法分析中的时间复杂度和空间复杂度概念。时间复杂度衡量算法执行时间随输入规模的增长趋势,空间复杂度则关注算法占用的额外存储空间,同样采用大O表示法分类。文章通过C语言代码示例展示了各类复杂度算法的实现,并提供了优化建议,指出时间与空间复杂度常需权衡取舍。最后强调复杂度分析是评估算法性能的基础能力,能帮助开发者选择高效算法设计。文章内容全面,配有代码示例和表格对比,适合编程初学者理解算法复杂度分析的核心概念。

2025-07-23 15:27:59 1248

原创 C语言——文件操作

文件文件操作是C语言程序与外部存储设备交互的重要方式。文件分为文本(ASCII存储)和二进制文件(效率更高)。基本操作包括创建、打开、读写、关闭和删除。

2025-07-12 16:15:33 815

原创 力扣(LeetCode) ——多数元素(C语言)

摘要:本文介绍了如何寻找数组中的多数元素(出现次数超过n/2的元素)。通过遍历数组维护候选元素和计数器,代码实现简洁高效,时间复杂度O(n),空间复杂度O(1)。

2025-07-05 15:56:15 256

原创 力扣(LeetCode) ——删除有序数组中的重复项(C语言)

这是一道原地删除有序数组中重复元素的算法题。解题思路使用双指针法,一个指针(top)跟踪当前唯一元素的位置,另一个指针(i)遍历数组。当遇到不同元素时,将其移至top+1位置并更新top。最终返回top+1即为去重后的数组长度。时间复杂度O(n),空间复杂度O(1)。

2025-07-04 10:27:57 218

原创 C语言——动态内存管理

本文详细讲解了C语言中的动态内存管理方法及相关函数。动态内存分配允许程序运行时灵活管理内存资源,相比静态分配具有更高的灵活性和可控性。文章介绍了malloc、free、calloc和realloc四个核心函数的用法及注意事项,并通过代码示例展示了正确与错误的使用方式。同时分析了常见内存问题(内存泄漏、野指针、越界访问)及其解决方案。最后概述了内存区域的划分(栈区、堆区、静态区、代码区)及各自特点。

2025-07-03 23:11:25 978

原创 C语言 “数据在内存中的存储”

数据在内存中的存储是计算机程序的底层基石,理解它才能写出高效、可靠的代码。无论是整数、浮点数,还是字符和数组,它们在内存中都以二进制的形式存在,但不同类型的解释方式却截然不同。比如,同样的二进制序列,有符号数和无符号数可能代表完全不同的值;而溢出、字节序、补码等概念,直接影响程序的运行结果。掌握这些原理,不仅能避免隐蔽的bug,还能优化性能,深入理解计算机的工作机制。

2025-05-22 11:57:19 1823

原创 C语言——深度理解指针

当大家初次接触指针时,往往会感到困惑甚至头大,仿佛陷入了一团迷雾。指针的本质是一个存储内存地址的变量。通过指针,我们可以间接访问和修改内存中的数据,这种间接性使得指针在处理函数参数传递、动态内存分配、数据结构构建等场景时,展现出无与伦比的优势。例如,在函数调用中,通过传递指针作为参数,函数可以直接修改调用者提供的变量,而无需进行额外的数据拷贝,大大提高了程序的运行效率。在动态内存分配方面,指针更是不可或缺,它允许程序在运行时根据需要申请和释放内存,为实现复杂的数据结构和算法提供了可能

2025-05-14 10:48:30 2194

原创 qsort函数详解

qsort是C标准库(stdlib.h)中的通用排序函数,基于快速排序算法实现。其核心优势在于无需预先知道数据类型,通过自定义比较函数,可对任意类型的数组进行排序。

2025-05-11 17:24:53 445 2

原创 C++扫雷游戏

扫雷是一款经典的单人游戏,玩家需要在有限的棋盘上找到所有未标记的格子,同时避免触发隐藏的雷。本文将详细介绍如何使用C++开发一个简单的扫雷游戏。我们将通过三个文件的代码实现:game.h、game.cpp 和 test.cpp,分别用于定义游戏逻辑、实现游戏功能和测试游戏运行。

2025-05-08 12:39:03 1968

空空如也

空空如也

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

TA关注的人

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