自信15041305759
码龄1年
求更新 关注
提问 私信
  • 博客:42,634
    42,634
    总访问量
  • 52
    原创
  • 183
    粉丝
  • 29
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:辽宁省
加入CSDN时间: 2025-07-01

个人简介:准大学生一枚~

  • 毕业院校: 渤海大学
博客简介:

cxw15041305759的博客

查看详细资料
个人成就
  • 获得1,145次点赞
  • 内容获得68次评论
  • 获得731次收藏
  • 博客总排名19,091名
  • 原力等级
    原力等级
    4
    原力分
    564
    本月获得
    0
创作历程
  • 23篇
    2026年
  • 29篇
    2025年
成就勋章
TA的专栏
  • 数据结构
    17篇
  • c++
    6篇
  • c语言
    27篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 0

TA参与的活动 20

兴趣领域 设置
  • 编程语言
    c++c语言
  • 开发工具
    visual studio
  • 数据结构与算法
    算法数据结构贪心算法排序算法leetcode
创作活动更多

AtomGit「码动四季·开源同行」秋季征稿活动

秋季征稿主题:开源成果经验分享 成果不止一种形态,我们为你准备了六大赛道,总有一款适合你: 开源项目成果复盘 把项目一年/一季的成长摊开来看:里程碑复盘、Star 与用户增长复盘、版本迭代复盘、从 0 到 1 的发布复盘。 🖊️ 示范选题: ●开源项目从 0 到 1000 Star,我做对了什么 ●开源一周年,我交出的成绩单 这类文章不只是一次经验分享,也是一张项目名片。欢迎将项目托管到 AtomGit 并申请成为 G-Star 项目,通过后可获得平台流量推荐、项目宣传等权益。(G-Star:AtomGit 最具影响力开源项目) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f90c61528ad410d8d66f9d0e3707a5a.png) 咨询 G-Star 项目申请 2️⃣ 技术经验体系化沉淀 踩坑合集、最佳实践总结、工具链实战、CI/CD 流水线搭建、代码重构与架构演进。 🖊️ 示范选题: ●提了 50 个 PR 后,我总结的开源协作避坑清单 ●一次重大重构复盘:把单体拆成可维护的模块 3️⃣ AI 赋能开源的实战成果 AI 编程助手实战测评、基于开源模型的微调与应用开发、AI 辅助研发提效流水线。 🖊️ 示范选题: ●我用 AI 编程助手把提 PR 效率翻了 3 倍 ●基于开源大模型搭了个 XX 工具(附完整教程) 4️⃣ 开源共建笔记|文档、社区与布道 开源文档写作与翻译、issue 互助经验、组织 meetup、用开源项目做教学与分享。 🖊️ 示范选题: ●一个优秀开源项目,文档应该怎么写 ●我用开源项目做了个线上 Workshop ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/23e83ceebc594c379f7fc6aa8dcfa40c.png) 扫码加入码动四季投稿交流群,和更多伙伴一起交流技术!

291人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

源码解析——GPIOx与GPIO初始化

本文解析了STM32单片机中GPIO寄存器的本质与初始化过程。通过分析STM32F103ZET6的HAL库源码,揭示了GPIOx宏定义背后的寄存器地址映射原理:从PERIPH_BASE(0x40000000)开始,经过APB2总线偏移和端口偏移计算得到具体GPIO端口的基地址。重点阐释了(GPIO_TypeDef*)强制类型转换的意义,将物理地址转换为结构体指针,实现对寄存器组的结构化访问。文章还通过具体示例展示了如何计算GPIOF的基地址(0x40011C00),并验证了GPIO初始化源码中时钟使能、模式
原创
博文更新于 2026.08.14 ·
642 阅读 ·
22 点赞 ·
2 评论 ·
4 收藏

数据结构之栈的实现

本文详细介绍了栈的实现方法及其应用。首先通过C语言实现了栈的基本操作,包括初始化、销毁、入栈、出栈、取栈顶元素、判空和获取元素个数等函数。接着展示了栈在解决"有效的括号"问题中的应用,利用栈的后进先出特性来匹配括号。文章提供了完整的代码实现和详细的解题思路,最后强调遍历结束后需要检查栈是否为空来判断所有括号是否匹配正确。
原创
博文更新于 2026.08.08 ·
629 阅读 ·
16 点赞 ·
0 评论 ·
7 收藏

重生之从0开始学习c++之string(上)

本文介绍了C++11中的两个重要语法特性:auto关键字和范围for循环。auto关键字允许编译器自动推导变量类型,简化了代码编写,但存在不能作为函数参数、不能声明数组等限制。范围for循环则提供了一种简洁的遍历容器方式,其底层实现基于迭代器操作,包括begin()、end()、!=比较、++前进和解引用等步骤。文章通过代码示例和汇编分析展示了这些特性的实际应用和底层原理,指出auto主要用于简化代码,而范围for循环本质上是传统迭代器操作的语法糖。这些特性在提升代码可读性的同时,仍保留了C++底层控制的灵
原创
博文更新于 2026.04.24 ·
556 阅读 ·
20 点赞 ·
1 评论 ·
10 收藏

插入排序算法

本文介绍了两种排序算法:直接插入排序和希尔排序。直接插入排序时间复杂度为O(n²),通过类似整理扑克牌的方式逐步构建有序序列。希尔排序是插入排序的改进版,时间复杂度约为O(n^1.3),采用"缩小增量"策略先进行预排序使数组基本有序,最后执行插入排序。文章详细讲解了两者的实现原理、代码实现和优化方法,包括分组处理与交替处理的区别,以及增量序列的选择。通过代码示例和变量解释,帮助读者深入理解这两种排序算法的工作原理和实现细节。
原创
博文更新于 2026.04.22 ·
623 阅读 ·
18 点赞 ·
1 评论 ·
7 收藏

重生之从0开始学习c++之模板初级

本文介绍了C++中的泛型编程和函数模板。主要内容包括:1)通过交换函数案例说明模板的必要性,避免重复代码;2)函数模板的语法和原理,编译器会根据调用类型自动生成具体函数;3)模板实例化的两种方式:隐式实例化(自动推导)和显式实例化(强制指定类型);4)模板与非模板函数的匹配规则,非模板函数优先匹配。函数模板实现了代码复用,提高了编程效率,是C++泛型编程的核心技术。
原创
博文更新于 2026.04.17 ·
397 阅读 ·
7 点赞 ·
0 评论 ·
6 收藏

重生之从0开始学习c++之内存管理

文章摘要: C/C++程序内存分为栈、堆、数据段、代码段等区域,各区域存储不同类型的数据。栈用于局部变量和函数调用,堆用于动态内存分配,数据段存放全局和静态变量,代码段存储可执行指令和常量。动态内存管理方面,C使用malloc/calloc/realloc分配堆内存,需手动管理;C++引入new/delete操作符,不仅分配内存还会自动调用构造函数/析构函数,更适合面向对象编程。new/delete将内存分配与对象生命周期管理结合,比malloc/free更安全高效,特别是对于自定义类型。正确理解内存分区和
原创
博文更新于 2026.04.15 ·
450 阅读 ·
10 点赞 ·
0 评论 ·
6 收藏

重生之从0开始学习c++之类与对象(下)

正常情况:类的 private 成员只能被本类的成员函数访问,外部函数不能触碰。class A {private:// 编译错误:无法访问 private 成员友元的作用:给某个外部函数或类发一张 “VIP 通行证”,允许它访问自己的私有成员。class A {// 声明 func 是 A 的友元private:// 可以访问了!在类内部用 friend 关键字声明。友元声明不是成员函数声明,它只是告诉编译器“这个函数/类可以访问我的私有成员”。
原创
博文更新于 2026.04.14 ·
728 阅读 ·
25 点赞 ·
0 评论 ·
13 收藏

重生之从0开始学习c++之类与对象(中)

本文介绍了C++类中的默认成员函数,重点分析了构造函数和析构函数的特性与使用场景。构造函数用于对象初始化,具有自动调用、可重载等特点,编译器会生成默认构造函数但对内置类型不做初始化;析构函数负责资源清理,对象销毁时自动调用,对于资源管理类必须自定义析构函数。文章通过代码示例展示了默认构造函数的调用规则、无参构造与全缺省构造的冲突,以及析构函数在资源释放中的关键作用,强调了自定义构造/析构函数在资源管理中的必要性。
原创
博文更新于 2026.04.10 ·
603 阅读 ·
16 点赞 ·
4 评论 ·
15 收藏

重生之从0开始学习c++之——类与对象(上)

本文介绍了C++中类的定义与实例化相关内容。首先讲解了类的基本定义格式,包括成员变量和成员函数的声明方式,以及访问限定符(public/private/protected)的作用。其次详细说明了类实例化的概念,指出类实例化出对象时才会分配物理内存空间。最后分析了对象大小的计算规则,说明对象只存储成员变量且需遵循内存对齐原则。文章通过代码示例展示了类的定义、成员函数实现、访问控制以及实例化过程,帮助理解C++面向对象编程的基本概念。
原创
博文更新于 2026.04.02 ·
549 阅读 ·
10 点赞 ·
0 评论 ·
10 收藏

重生之从0基础开始学习c++之——c++入门开篇

本文介绍了C++编程入门的基础知识,包括"Hello World"程序的实现、命名空间的概念与使用、C++输入输出方法以及缺省参数的用法。主要内容如下: C++版本的"Hello World"程序示例,展示了与C语言的不同之处; 命名空间(namespace)的作用及定义方法,解决了命名冲突问题; C++的输入输出流(cin/cout)的使用方式及其优势; 缺省参数的概念,包括全缺省和半缺省参数的语法规则。 文章通过代码示例详细说明了这些基础特性的使用方法,为C++初
原创
博文更新于 2026.04.01 ·
494 阅读 ·
14 点赞 ·
0 评论 ·
10 收藏

归并排序算法

归并排序是一种分治算法,通过递归将数组不断二分至单个元素后回溯合并。核心步骤是分解和合并:分解将数组拆分为子数组,合并则将两个有序子数组合并为一个有序数组。递归版本使用临时数组存储合并结果,避免覆盖原数据。非递归版本通过迭代控制子数组大小gap,从1开始逐步翻倍合并相邻子数组,直到整个数组有序。两种方式时间复杂度均为O(nlogn),但递归版本需要额外栈空间,非递归版本更节省内存。关键点在于正确设置临时数组索引和合并时的边界条件。
原创
博文更新于 2026.03.26 ·
503 阅读 ·
20 点赞 ·
2 评论 ·
5 收藏

交换排序算法

本文介绍了两种排序算法:冒泡排序和快速排序。冒泡排序通过相邻元素比较交换,每轮将最大元素"冒泡"到末尾,并设置标志位优化已排序情况。快速排序采用分治策略,通过选取基准值将数组分为两部分递归排序。文中详细分析了快速排序的初始实现存在的最坏时间复杂度问题和栈溢出风险,并给出了优化方案:1)三数取中选择基准值避免最坏情况;2)小规模数据改用插入排序;3)非递归实现。两种算法均配有完整C代码实现和详细执行过程分析。
原创
博文更新于 2026.03.24 ·
515 阅读 ·
12 点赞 ·
1 评论 ·
12 收藏

选择排序算法

本文详细介绍了两种排序算法:直接选择排序和堆排序。直接选择排序通过每次找出最小值和最大值并交换到两端实现排序,时间复杂度为O(n²),文中特别强调了处理最大值在起始位置的特殊情况。堆排序部分详细解析了建堆和排序过程,通过调整堆结构实现排序,包括具体的节点调整步骤和交换操作。两种算法均附有代码实现和关键细节说明,堆排序部分还配有详细的示例图解,帮助理解排序过程。
原创
博文更新于 2026.03.22 ·
570 阅读 ·
12 点赞 ·
1 评论 ·
9 收藏

数据结构初阶之二叉树收尾

本文介绍了二叉树的层序遍历(广度优先遍历)及其应用。层序遍历通过队列实现,按从上到下、从左到右的顺序访问节点。基于层序遍历,可以判断完全二叉树:遇到第一个空节点后,检查队列中剩余节点是否全为空。文章还总结了二叉树的性质(如n0=n2+1)并通过多个选择题进行了验证。此外,通过实例演示了如何根据前序/中序/后序遍历序列重建二叉树结构。这些内容涵盖了二叉树的基本遍历方法和重要性质,是理解二叉树操作的基础。
原创
博文更新于 2026.03.18 ·
548 阅读 ·
19 点赞 ·
2 评论 ·
12 收藏

数据结构之二叉树算法题

本文介绍了二叉树相关的几个算法问题及解决方案: 查找第k层节点个数:通过递归逐层下降,当k=1时计数当前节点,否则递归计算左右子树的k-1层节点数之和。 查找值为x的节点:递归遍历时正确处理返回值是关键,需要先检查当前节点,再递归查找左右子树,确保结果正确传递。 单值二叉树判断:检查当前节点与左右子节点值是否相同,并递归验证左右子树是否都为单值树。 判断两棵树是否相同:比较节点值和结构,递归检查左右子树是否相同。 对称二叉树判断:通过镜像比较,验证左子树的左节点与右子树的右节点是否对称。 这些算法都采用递归
原创
博文更新于 2026.03.17 ·
777 阅读 ·
30 点赞 ·
0 评论 ·
9 收藏

数据结构之实现链式结构二叉树

本文介绍了二叉树的基本实现与遍历方法。首先定义了二叉树节点结构体BTNode,包含左右子节点指针和数据域。通过BTBuy函数动态创建节点,CreateTree函数构建示例二叉树。重点讲解了三种递归遍历方式:前序(根-左-右)、中序(左-根-右)和后序(左-右-根)遍历,并分析了递归调用过程。在计算节点个数时,指出了局部变量size在递归中存在的问题,建议使用静态变量或全局变量解决。文章通过图示和代码示例,清晰展示了二叉树的构建和遍历过程,为后续二叉树操作打下基础。
原创
博文更新于 2026.03.16 ·
571 阅读 ·
20 点赞 ·
0 评论 ·
11 收藏

数据结构初阶——二叉树之——堆的实现

本文实现了一个基于数组的最小堆数据结构。关键功能包括:初始化堆(HPInit)、销毁堆(HPDestroy)、插入元素(HPPush)和删除堆顶(HPPop)。插入时通过AdjustUp保持堆性质,删除时通过AdjustDown调整。堆排序(HeapSort)功能通过建堆和反复删除堆顶实现。代码采用动态内存管理,支持自动扩容,包含完整错误检查机制。测试用例展示了堆的基本操作和排序功能。
原创
博文更新于 2026.03.13 ·
672 阅读 ·
20 点赞 ·
0 评论 ·
12 收藏

在线OJ之用队列实现栈及设计循环队列

本文介绍如何使用两个队列实现栈的功能。核心思路是利用队列的先进先出特性,通过元素转移操作模拟栈的后进先出。主要操作包括:入栈时直接插入非空队列;出栈时将非空队列除最后一个元素外全部转移到空队列,再弹出最后一个元素;取栈顶直接返回队尾元素。代码实现了队列的基本操作和基于队列的栈结构,包括初始化、入栈、出栈、获取栈顶和判空等功能。这种实现方式虽然时间复杂度较高(出栈操作O(n)),但展示了数据结构间的巧妙转换。
原创
博文更新于 2026.03.11 ·
493 阅读 ·
19 点赞 ·
4 评论 ·
12 收藏

数据结构之队列的实现

本文介绍了队列的基本操作实现,包括初始化、销毁、插入、删除等核心功能。通过定义Queue结构体存储头尾指针和队列大小,简化了指针操作。重点讲解了插入(QueuePush)和删除(QueuePop)的实现细节:插入需处理空队列和非空队列两种情况,删除需注意释放内存并更新头指针。同时提供了获取队头队尾元素(QueueFront/QueueBack)、获取队列大小(QueueSize)和判空(QueueEmpty)等辅助功能。所有操作都包含必要的断言检查,确保程序的健壮性。
原创
博文更新于 2026.03.10 ·
248 阅读 ·
7 点赞 ·
1 评论 ·
1 收藏

环形链表问题与随机链表的复制oj复盘

本文讨论了两种链表相关算法问题:环形链表检测与随机链表复制。对于环形链表,使用快慢指针法可以高效检测环的存在并找到环的入口点,通过数学推导证明了该方法的正确性。随机链表复制问题则采用了一种巧妙的三步法:先在原节点后插入复制节点,然后设置random指针,最后分离新旧链表。这种方法利用原链表的next指针建立映射关系,确保random指针能正确指向复制节点。两种算法都展示了指针操作在解决链表问题中的强大能力,体现了空间复杂度和时间复杂度的优化思想。
原创
博文更新于 2026.03.08 ·
648 阅读 ·
16 点赞 ·
0 评论 ·
12 收藏
加载更多