自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《链式二叉树常用操作全解析》

本文介绍了链式二叉树的常见操作实现,包括:1. 计算节点总数(递归累加);2. 统计叶子节点数量(识别无子节点);3. 计算第k层节点数(递归降层);4. 求树深度(取左右子树最大深度+1);5. 查找指定值节点(前序遍历);6. 销毁树结构(后序遍历释放)。所有操作均采用递归实现,时间复杂度O(n),空间复杂度O(h)。测试用例验证了各功能的正确性,体现了二叉树操作的递归特性和分治思想。

2025-09-13 13:44:55 1110 20

原创 《链式二叉树详解:定义、创建与遍历》

链式二叉树是基于链表实现的二叉树存储结构,每个节点包含数据域和左右孩子指针。文章详细介绍了链式二叉树的创建方法,包括节点结构体定义和手动构建过程。重点讲解了三种基本遍历方式:前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根),通过代码示例和图示分析了每种遍历的特点和访问顺序。文章还提供了完整的C语言实现代码,展示了如何通过递归实现这些遍历方法。链式二叉树相比顺序存储更灵活,是树结构最常用的实现方式。

2025-09-13 12:16:04 1009 4

原创 《堆的详解:结构、操作及堆排序算法》

堆是一种完全二叉树数据结构,分为大堆和小堆,具有堆序性(父节点值大于/小于子节点值)。文章详细介绍了堆的结构定义、初始化、销毁等基本操作,重点阐述了插入和删除元素时使用的向上调整和向下调整算法。同时讲解了两种堆排序实现:借助堆结构的外部排序和原地排序的堆排序算法,后者通过构建大堆并反复提取最大值实现升序排序,具有O(nlogn)时间复杂度和O(1)空间复杂度。文章通过代码示例和图示清晰展示了堆的操作流程和排序原理。

2025-09-12 18:13:20 1091 7

原创 《树与二叉树详解:概念、结构及应用》

目录一. 树的概念和结构1.1 树的基本概念1.2 树的结构特点二. 树的表示方法和实际运用2.1 孩子 - 兄弟表示法(Child-Sibling Representation)2.2 树的实际应用场景三. 二叉树的概念3.1 二叉树的核心定义3.2 二叉树的基本分类四. 二叉树的性质性质 1:节点数量与层数的关系性质 2:深度与总节点数的关系性质 3:叶子节点与度为 2 的节点的关系性质 4:完全二叉树的深度性质 5:完全二叉树的节点索引关系五. 二叉树的存储结构一、顺序存储结构二、链式存储结构在数据结

2025-09-12 17:10:27 1006 8

原创 《详解链式队列:原理、操作与销毁方法》

本文介绍了链式队列的基本概念和实现方法。链式队列采用链表结构存储,避免了数组实现时元素移动的开销,具有O(1)时间复杂度的入队和出队操作。文章详细说明了链式队列的结构组成,包括节点定义和队列管理指针(头指针和尾指针),并提供了完整的C语言实现代码,涵盖初始化、入队、出队、取队头/队尾元素、判空和销毁等基本操作。通过链式存储方式,队列可以高效地实现先进先出(FIFO)的特性。

2025-09-07 19:58:47 1087 11

原创 《数据结构全解析:栈(数组实现)》

下面让我们来观察一下用数组来实现结构体栈的定义// 定义栈中元素的数据类型(可根据需求修改,如int、char等)//数组 用于存放数据int top;//对顶部进行操作 也是栈内有效数据//栈的容量}ST;顺序栈的结构体需要包含三个关键成员:动态数组指针:用于存储栈的元素(连续内存空间)。栈顶指针(top):记录栈顶元素的位置(通常用数组下标表示)。容量(capacity):记录当前数组的最大可存储元素数量(避免溢出)。栈顶指针(top)的设计细节初始时top = 0。

2025-09-07 12:26:32 1479 13

原创 《深入理解双向链表:增删改查及销毁操作》

本文系统介绍了链表数据结构,重点分析了双向链表的实现与应用。主要内容包括:1)链表分类(单向/双向、带头/不带头、循环/不循环);2)双向链表特性(带头双向循环结构)及其哨兵位设计原理;3)详细实现双向链表的初始化、增删改查(尾插头插、尾删头删、查找定位、指定位置操作)及销毁等核心操作,通过指针调整实现O(1)时间复杂度的插入删除。文章通过代码示例和复杂度分析,展示了双向链表通过哨兵位统一处理边界条件的优势,为数据结构学习提供了实用参考。

2025-09-05 16:49:18 994 13

原创 《单链表刷题必备:五大核心问题解析》

本文介绍了五种链表操作的算法实现:1. 链表分割:使用哑节点将链表按给定值x分为两部分,时间复杂度O(n); 2. 相交链表:通过计算长度差和同步遍历找到交点,时间复杂度O(n+m); 3. 环形链表检测:使用快慢指针判断是否存在环,时间复杂度O(n); 4. 环形链表入口查找:分两阶段检测环并确定入口,时间复杂度O(n); 5. 复杂链表复制:通过节点插入和拆分实现高效复制,时间复杂度O(n)。所有算法均采用最优解,具有空间效率高的特点。

2025-09-05 11:46:09 842 1

原创 《单链表经典问题全解析:5 大核心题型(移除元素 / 反转 / 找中点 / 合并 / 回文判断)实现与详解》

本文摘要: 本文系统讲解了五种链表操作算法:1)移除指定元素节点,通过遍历筛选和尾指针优化;2)反转链表,使用三指针原地反转;3)快慢指针法查找中间节点;4)合并有序链表,采用虚拟头节点简化操作;5)判断回文结构,结合快慢指针、链表反转和双指针对比。每种算法均包含核心思路、代码结构解析、边界处理说明和完整实现,重点突出了指针操作技巧和空间复杂度优化(O(1)),适用于面试准备和算法学习。

2025-09-03 20:48:36 653

原创 《单链表学习手册:从原理到代码实现(含头插 / 尾插 / 销毁)》

本文系统介绍了单链表的核心概念与基本操作。单链表是一种通过指针连接节点的线性数据结构,具有离散存储、动态扩容等特点。主要内容包括:1.单链表的结构组成(节点定义、带头节点设计);2.基本操作实现(打印、头插尾插、头删尾删);3.进阶操作(查找节点、指定位置插入/删除);4.链表销毁方法。每种操作都提供了清晰的实现思路和C语言代码示例,特别强调了边界条件处理和指针操作顺序。本文可作为学习单链表基础操作的实用指南,为后续学习更复杂数据结构奠定基础。

2025-09-03 11:00:00 1782

原创 《深度讲解 C 语言动态内存:函数用法、错误规避与经典笔试题》

文章摘要:本文系统介绍了C语言动态内存管理的核心概念与常见错误。主要内容包括:malloc/free的基础用法,calloc/realloc的扩展功能,以及6类常见动态内存错误(空指针解引用、越界访问、错误释放等)的成因与规避方法。通过4个经典笔试题分析,深入剖析了指针传递、栈内存返回、内存泄漏和野指针等关键问题。最后总结了程序内存区域的划分(代码区、堆栈区等)。文章强调动态内存管理的核心原则是"申请必检查、释放要合法、指针不野化",为C程序员提供了全面的内存管理实践指南。

2025-08-28 20:34:08 925 1

原创 《数据结构入门:顺序表的结构设计与核心操作(C 语言版)》

本文系统介绍了线性表的顺序存储结构——顺序表。主要内容包括:1)线性表的基本概念和特性;2)顺序表的核心概念与两种实现方式(静态顺序表和动态顺序表);3)动态顺序表的具体实现方法,包括初始化、容量检查与扩容、插入(头插、尾插、指定位置插入)、删除(头删、尾删、指定位置删除)等核心操作;4)查找和销毁操作实现。通过对比分析,动态顺序表因其灵活的容量调整能力成为实际开发中的主流选择。文章提供了完整的代码示例,帮助理解顺序表的具体实现过程。

2025-08-28 16:36:07 1350 1

原创 《程序员必备:算法复杂度分析教程》

本文系统介绍了数据结构与算法的核心概念,重点分析了算法效率的评估方法。主要内容包括:1. 数据结构的分类(线性/非线性结构)和常见算法类型;2. 算法效率的衡量指标——时间复杂度和空间复杂度;3. 大O渐进表示法的推导规则和应用;4. 常见复杂度类别(从O(1)到O(n!))的性能对比和适用场景;5. 通过轮转数组等实例详细演示了复杂度计算方法。文章强调,算法复杂度分析是评估算法性能的关键工具,能帮助开发者选择最优算法,尤其在大规模数据处理时尤为重要。不同复杂度类别的性能差异显著,高效算法(如O(nlogn

2025-08-26 17:24:30 873 1

原创 《C 语言文件操作补充:字符串格式化与随机读写全解析》

文章摘要: 本文介绍了C语言中字符串处理和文件操作的关键函数及机制。第一部分讲解sprintf和sscanf函数,用于字符串格式化输出(如数值转字符串)和解析(如提取日志数据),强调需注意缓冲区溢出和格式匹配问题。第二部分详述文件随机读写函数:fseek移动指针位置,ftell获取当前位置,rewind重置指针,适用于二进制文件高效操作。第三部分解析文件缓冲区机制,说明全缓冲、行缓冲和无缓冲的区别,并介绍fflush强制刷新和setvbuf自定义缓冲区的操作方法,以优化I/O性能。全文结合代码示例说明核心功

2025-08-26 12:00:00 1822

原创 《零基础学 C 语言文件顺序读写:fputc/fgetc 到 fread/fwrite 函数详解》

本文介绍了C语言中常用的文件操作函数,包括字符级读写(fputc/fgetc)、字符串级读写(fputs/fgets)、格式化读写(fprintf/fscanf)以及二进制块读写(fwrite/fread)。这些函数分别适用于不同场景:字符级函数适合逐个字符处理;字符串级函数适合文本行操作;格式化函数方便结构化数据读写;二进制函数则适合处理非文本数据。文章还详细讲解了文件状态检测函数feof和ferror的使用方法,并强调了二进制模式的重要性及跨平台兼容性注意事项。每种函数都配有示例代码说明其基本用法,帮助

2025-08-25 19:08:12 817

原创 《C 语言数据文件操作指南:二进制 / 文本文件、标准流及文件打开关闭全解析》

摘要:本文系统介绍了C语言中文件操作的核心概念,包括文件类型(程序文件/数据文件)、文件名组成、二进制与文本文件的区别。重点讲解了文件流(Stream)机制和标准流(stdin/stdout/stderr)的作用,详细解析了文件指针(FILE*)的本质及其在文件操作中的核心地位。通过具体代码示例演示了fopen/fclose函数的使用方法,包括不同打开模式(r/w/a等)的选择策略和注意事项,强调了文件操作中必须进行错误检查(如NULL判断)和资源释放的重要性,为C语言文件处理提供了完整的实践指导。(149

2025-08-25 15:28:49 1204

原创 <<C 语言内存存储实战:从原码补码到大小端判断(附 6 大经典例题)>>

本文主要介绍了整数和浮点数在内存中的存储方式。整数存储采用原码、反码和补码三种形式,其中补码便于统一处理符号位和数值域,实现加减法统一运算。文章还详细讲解了大小端字节序的概念及判断方法,并通过多个编程练习演示了不同数据类型在内存中的存储特点和数值解析规则。浮点数部分介绍了IEEE 754标准下的存储格式,包括符号位、指数位和有效数字位的分配方式,以及不同情况下指数的取值规则。通过具体代码示例分析了整数和浮点数在内存中的存储差异,帮助读者理解数值在计算机系统中的底层表示原理。

2025-06-03 17:05:27 760

原创 《C 语言内存函数超详细讲解:从 memcpy 到 memcmp 的原理与实战》

可能导致数据错误。如果可能重叠,应该使用。

2025-05-23 19:14:18 1621

原创 《C 语言字符串操作从入门到实战(下篇):strncpy/strncat/strstr 等函数原理与实现》

在不同的系统和C语言标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头文件中说明的,C语言程序启动的时候就会使用⼀个全局的变量 errno 来记录程序的当前错误码,只不过程序启动的时候errno是 0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在 errno 中,而⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。是 C 标准库中的一个字符串查找函数,用于在一个字符串中查找另一个字符串的首次出现位置。

2025-05-22 17:22:40 1530

原创 《C 语言字符串操作从入门到实战(上篇):字符分类、转换及strlen/strcpy等函数详解》

上面练习中我们将小写转大写,是利用了小写字母和大写字母的Ascll码值差32的性质,现在有了转换函数,我们就可以直接使用toupper函数实现小写转大写了。从目标字符串的’\0’处开始追加,如果目标字符串未正确终止,会导致未定义行为。会一直读取源字符串直到遇到’\0’,如果源字符串未正确终止,会导致未定义行为。是 C 标准库中用于计算字符串长度的函数,定义在。是 C 标准库中用于比较两个字符串的函数,定义在。是 C 标准库中用于字符串复制的函数,定义在。是 C 标准库中用于字符串拼接的函数,定义在。

2025-05-21 15:45:12 1374

原创 《C 语言 sizeof 与 strlen 深度对比:原理、差异与实战陷阱》

sizeof计算变量所占内存空间的大小,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。sizeof 只关注占用内存空间的大小,不在乎内存中存放什么数据;并且sizeof中表达式不计算通过运行该代码可以得到其中a是int类型 占4个字节a+3.14 由于a算术提升到了double类型 因此占8个字节strlen是C语言库函数,功能是求字符串长度练习strlen函数 请自己思考一下 下面函数会打印那些值运行结果如下其中由于arr1并没有 ' \0 ' 结尾 因

2025-05-20 17:32:08 1877

原创 《从回调函数到 qsort:C 语言指针高级应用全攻略》

回调函数就是一个通过函数指针调用的函数示例如下int Add(int x, int y)//回调函数Addint main()text(Add);//text是调用Add的那方return 0;其中Add被称为回调函数即如果你把函数的指针(地址)作为参数传递给另一个函数 当这个指针被用来调用其所指向的函数时 被调用的函数就是回调函数 回调函数不是由该函数的实现方调用 而是在特定的事件或条件发生时由另外的一方调用的 用于对该事件或条件进行响应qsort是 C 标准库(

2025-05-19 17:41:25 1489 2

原创 《C 语言指针高级指南:字符、数组、函数指针的进阶攻略》

使代码更易读、更简洁。

2025-05-14 16:03:08 1340

原创 《C 语言指针进阶:const 修饰、断言机制与传址调用深度解析》

理解传值和传址调用的区别对编写高效、安全的代码至关重要。

2025-05-09 11:00:00 2738

原创 《从 0 到 1:用 C 语言打造猜数字与扫雷小游戏攻略》

引言: 游戏开始运行时,玩家可选择开始游戏或退出游戏,选择开始游戏后系统将随机生成一个1~100的数字,玩家则是进行一个猜数字的操作,若猜的数字比答案大或小都分别会有相关提示,猜出正确答案后,玩家可选择再来一局或退出游戏,若再来一局系统将生成一个新的随机数作为答案,玩家则只需重复上述操作,若玩家选择退出则程序结束运行。输入1 则进入游戏 输入0 则使用break跳出 输入其他则 提示"输入错误 请重新输入"2.1 猜小了 会打印你猜小了 请重新输入。

2025-05-08 11:00:00 1061

原创 《VS2022 调试实战手册:高效排查代码问题的必备攻略》

调试(Debugging)是指使用其内置的调试工具来逐步执行代码、检查变量、分析程序状态,以发现并修复错误(Bug)的过程。在我看来 调试就是对代码的排查 好比名侦探柯南一样 柯南是通过嫌疑人留下的蛛丝马迹找出了罪犯 而我们则是需要通过调试 一步一步的找到我们的罪犯(BUG) 解决掉了它 我们程序员也就破案了 切忌一遍又一遍盲目的运行修改 那就好比瞎子摸象。

2025-05-07 14:18:18 1369

原创 《初探指针世界:揭开内存管理与编程优化的第一篇章》

C语言中的内存布局代码区(Text Segment):存储编译后的机器指令(如函数代码)。全局/静态区(Data Segment):存储全局变量和静态变量(如堆区(Heap):动态分配的内存(如malloc分配的空间),需手动管理。栈区(Stack):存储局部变量、函数参数等,由系统自动分配和释放。高地址│ 栈区 │ ← 局部变量、函数调用(向下增长)│ 堆区 │ ← 动态内存(向上增长)│ 全局/静态区 │ ← 全局变量、static变量│ 代码区 │ ← 程序指令低地址。

2025-05-04 11:04:14 1751

原创 《C 语言操作符深度指南:代码优化与高效编程必备》

16进制的数字每一位是0~9 a~f的数字 各自写成2进制 最多有4个2进制位就足够了 比如f的二进制位是1111 所以2进制转16进制的 时候 从2进制序列的右边低位开始向左依次 每4个2进制位换算一个16进制位 剩余不够4个2进制位则直接换算。8进制数字是0~7的数字 各自写成二进制每3个二进制位就足够了 比如7的二进制位是111 所以2进制转8进制的时候 从2进制序列中 右边低位开始向左依次 每3个2进制位换算一个8进制位 剩余不够3个2进制位则直接换算。

2025-04-28 21:25:07 2576 3

原创 C语言----函数栈帧讲解

栈(Stack)是现代计算机程序的核心基础之一,几乎所有程序都依赖它运行。简单来说,栈就像一个严格遵守"后来先出"规则的容器:数据像叠盘子一样被压入(push)栈顶,取出时也只能从最上面弹出(pop)。在计算机中,栈是一块特殊的内存区域,由CPU通过栈指针寄存器(如x86架构的ESP/RSP)自动管理,随着数据压入栈顶指针向低地址移动(栈向下增长),弹出时则向高地址回退。正是这个精巧的设计,使得函数调用、局部变量存储、参数传递等关键功能得以实现,可以说没有栈就没有现代编程语言中的函数概念。

2025-04-25 11:00:00 1875

原创 《C 语言函数进阶全解析:嵌套、链式与递归深度探秘》

2.1 回顾函数的声明和定义1.告诉编译器有一个函数叫什么 参数是什么 返回类型是什么 但是具体存不存在 声明无法决定2.函数的声明一般出现在函数的使用之前 要满足先声明后使用3.函数的声明一般放在头文件中函数的定义指的是函数的具体实现 交代函数的功能实现在函数入门篇中 我们已经大概了解了函数的声明和定义 但实际在项目中 我们并不会这样操作现在让我们去继续了解函数的声明和定义吧 让我举个栗子来具体讲解不难看出 我调用了add函数 并把它作为了printf的参数打印了出来 但有小伙伴会问了。

2025-04-18 18:23:04 7038 1

原创 《C 语言数组深度指南:从一维到二维的入门全解析》

在官方给出的答案中是这样写的,数组是一种用于存储相同类型数据的连续内存空间的集合。它允许通过一个统一的名称和索引(下标)来访问多个同类型的数据元素。关键点在于多个 相同类型数据 元素因此不难看出,出现数组的原因是因为,当程序员需要使用大量相同类型的数据时,我们难道一个一个去定义吗?这显然并不可能 因此出现了数组这一概念 避免了这种情况按维度分类一维数组 多维数组(常见的是二维数组)2. 一维数组2.1 一维数组的创建和初始化一维数组的定义:线性排列的一组数据,只有一个下标(索引)

2025-04-17 21:07:35 1557

原创 如何应对使用scanf时的非法输入

调用会直接读取到这个留在缓冲区里的非数字字符,从而导致持续的读取失败,让程序陷入一种不符合预期的状态。就无法把输入转换为整数,读取操作就会失败,并且这个非数字字符会留在输入缓冲区里。,从而导致后续的输入操作受到影响。:清理输入缓冲区可以让程序回到正常的输入等待状态,等待用户重新输入有效的数据。时,它期望用户输入一个整数。读取失败时,非数字字符会留在输入缓冲区里。函数,把输入缓冲区里的字符逐个读取出来,直到遇到换行符。调用会直接读取到这个非数字字符,导致持续的读取失败。若不清理输入缓冲区,后续的。

2025-04-16 18:49:04 669

原创 《C 语言函数实用指南:新手快速上手的必备攻略》

1.1 数学中的函数首先在数学中,函数描述了一种输入与输出的对应关系,通常表示为: y = f(x)定义:对于给定的输入 ( x )(自变量),函数 ( f ) 唯一确定一个输出 ( y )(因变量)。关键特性唯一性:每个输入对应唯一的输出(允许多个输入对应同一输出)。定义域与值域:所有可能的输入集合称为定义域,输出集合称为值域。1.2 计算机科学中的函数在编程中,函数是一段可重复调用的代码块,用于执行特定任务。组成输入(参数):传递给函数的数据。处理逻辑:函数内部的代码。输出(返回值)

2025-04-15 15:14:31 1153

原创 《C 语言分支与循环全攻略:从基础语法到实战应用》

c语言是一门结构化语言 其中的结构指的就是。

2025-04-13 17:05:52 1451 1

原创 《一文读懂 C 语言数据类型和变量:基础、操作与输入输出详解》

例如: #define O 100;此时就将O定义为了标识符常量 值为100。

2025-04-10 19:33:21 1468

原创 《趣学 C 语言:开启编程世界的奇妙之旅》

库函数就是为了避免重复常见的代码 提高编程效率 C语言标准规定了一组函数 这些函数组成了一个函数库 被称为标准库 里面的函数也被称为库函数 一个系列的库函数会声明在同一个头文件中 因此使用库函数需要包含对应的头文件6 什么是关键字c语言保留了一批符号和名字 如int if return等等 被称为保留字或关键字关键字有特殊含义 是给c语言使用的创建标识符时不可以和关键字重复关键字也是不能自己创建的。

2025-03-31 20:17:18 950 1

空空如也

空空如也

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

TA关注的人

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