- 博客(30)
- 收藏
- 关注
原创 使用VS调试OJ代码
这篇文章讲解了力扣203题"移除链表元素"的调试步骤:1)将力扣代码复制到VS;2)自行创建测试方法;3)利用VS调试工具排查问题。文中提到力扣已提供单链表结构和函数,只需在VS中实现即可。
2025-08-27 23:08:41
290
原创 数据结构:单链表的应用(力扣算法题)第一章
本文总结了链表相关的5个经典算法题及其解法: 移除链表元素(203题) - 提供遍历删除和新建链表两种解法 反转链表(206题) - 给出头插法和三指针法两种实现 链表中点查找(876题) - 介绍长度计算和快慢指针两种方法 合并有序链表(21题) - 包含迭代和递归两种解决方案 回文链表判断 - 提出复制反转、数组存储和反转后半段三种思路 每种解法都附有详细代码实现和复杂度分析,重点讨论了指针操作、边界条件处理等关键点,为链表相关算法问题提供了全面的解决思路。
2025-08-27 23:05:32
985
原创 数据结构:单链表(详解)
本文介绍了单链表的数据结构及其实现方法。首先分析了顺序表的局限性(O(N)插入删除、扩容消耗、空间浪费),提出单链表作为解决方案。单链表通过指针链接实现非连续存储,每个节点包含数据和指向下一节点的指针。文章详细讲解了单链表的实现,包括创建节点、尾插/头插、尾删/头删、查找、指定位置插入/删除等操作,并提供了完整的代码实现和调试示例。重点强调了二级指针在链表操作中的必要性,以及各操作的时间复杂度和实现细节。最后说明了链表销毁的注意事项,特别指出局部变量pcur无需置空的原因。
2025-08-25 23:28:33
970
原创 数据结构:顺序表
本文介绍了线性表的基本概念,重点讲解了顺序表的实现原理和操作。线性表是n个具有相同特性的数据元素的有限序列,包括顺序表、链表、栈、队列等。顺序表是用连续存储单元实现的线性结构,分为静态和动态两种类型。文章详细阐述了动态顺序表的实现方法,包括尾插、头插、尾删、头删等基本操作,并介绍了扩容机制。最后,通过LeetCode算法题展示了顺序表的实际应用,如移除元素、删除重复项和合并有序数组等。文章提供了完整的代码实现和调试方法。
2025-08-20 11:44:12
754
2
原创 数据结构:算法复杂度与空间复杂度
本文介绍了数据结构与算法的基础概念,重点讲解了算法效率的衡量标准——时间复杂度和空间复杂度。文章首先阐述了数据结构与算法的关系及其重要性,然后通过具体示例详细讲解了时间复杂度的计算方法和大O渐进表示法,并分析了不同算法的时间复杂度差异。同时,文章也介绍了空间复杂度的概念和计算方法。最后通过"轮转数组"案例展示了如何优化算法复杂度,比较了三种不同解法的时间、空间复杂度特点。文章强调,在算法设计中需要权衡时间和空间复杂度,以提升程序执行效率。
2025-08-01 21:58:32
734
原创 c语言:预处理详解
本文介绍了C语言预处理指令的相关知识,主要包括:1. 预定义符号如__FILE__、__LINE__等;2. #define定义常量和宏的语法及注意事项;3. 带副作用的宏参数和宏替换规则;4. 宏与函数的优缺点对比;5. #和##运算符的使用;6. 命名约定、#undef和命令行定义;7. 条件编译指令;8. 头文件的包含方式及嵌套文件包含的解决方案。这些内容涵盖了C语言预处理阶段的主要特性,是编写高效、可维护代码的重要基础。
2025-07-23 13:40:38
815
原创 c语言:编译和链接
C语言程序从源代码到执行涉及两个关键环境:翻译环境和运行环境。翻译环境包括四个阶段:预处理(处理宏定义、头文件等)、编译(词法分析、语法分析等生成汇编代码)、汇编(转为机器指令)、链接(合并目标文件并解决符号引用)。运行环境则负责程序加载、执行(使用堆栈管理局部变量)、维护静态变量值,直至程序终止。在Windows和Linux下目标文件后缀不同(.obj/.o),链接过程通过重定位修正跨文件的函数和变量引用地址。
2025-07-22 17:49:44
784
原创 c语言:文件操作
本文主要介绍了C语言中文件操作的基础知识。内容包括:1. 文件的作用(数据持久化保存)和分类(程序文件与数据文件);2. 文件名组成和文件类型(文本文件与二进制文件);3. 标准流概念(stdin/stdout/stderr)和文件指针FILE*;4. 文件打开关闭函数(fopen/fclose)及操作模式;5. 文件顺序读写函数(fputc/fgetc/fputs/fgets/fprintf/fscanf/fwrite/fread);6. 文件随机读写函数(fseek/ftell/rewind);7. 文
2025-07-20 23:53:17
1005
原创 函数栈帧的创建与销毁
本文深入解析了函数栈帧的创建与销毁机制。函数栈帧是函数调用时在调用栈上开辟的空间,用于存储参数、局部变量和上下文信息。文章通过VS2019反汇编代码演示了main函数和Add函数的栈帧创建过程,详细解释了寄存器(ebp/esp)维护栈空间的原理,以及参数传递、局部变量初始化的实现机制。特别分析了函数调用时的参数压栈顺序、形参实例化过程,以及通过eax寄存器带回返回值的原理。文章还揭示了栈帧销毁时如何恢复主调函数的上下文,并解释了未初始化局部变量出现"烫"字的原因。这些底层机制的分析有助于
2025-07-18 20:32:58
626
原创 C语言:动态内存管理
本文介绍了C语言中动态内存分配的概念与实现方法。主要内容包括:1) 动态内存分配的必要性,解决固定大小数组的局限性;2) malloc和free函数的使用方法及注意事项;3) calloc和realloc函数的功能特点;4) 常见动态内存错误类型;5) 柔性数组的定义和使用优势;6) C/C++程序内存区域划分。文章重点讲解了动态内存管理的核心函数和常见问题,并分析了典型错误案例,最后总结了内存区域的分类及其特性。
2025-07-16 21:59:10
862
原创 自定义类型:联合和枚举
本文介绍了C语言中联合体(union)和枚举类型(enum)的基本概念与使用。联合体是一种共用内存空间的特殊结构,所有成员共享同一块内存,大小为最大成员的大小或其对齐数的整数倍。枚举类型用于定义一组命名的整数常量,相比#define具有类型检查、可读性强等优势。文章详细说明了两种类型的声明方式、特点、使用场景及与相关概念的对比,并特别指出了在C++中枚举类型更严格的类型检查要求。通过学习这些内容,可以更好地理解和使用C语言中的这两种复合数据类型。
2025-07-15 19:58:38
351
原创 自定义类型:结构体
本文总结了C语言结构体的关键知识点。主要内容包括:1.结构体声明与初始化方法,包括匿名结构体和自引用结构体的注意事项;2.结构体内存对齐规则及其原因(平台兼容性和性能优化),并介绍了修改默认对齐数的方法;3.结构体传参的最佳实践(推荐传递指针而非值传递);4.位段的定义、内存分配方式及跨平台问题,以及位段在网络协议等场景中的应用优势。文章强调结构体设计需要权衡空间与时间效率,并指出位段虽然节省空间但存在可移植性问题。
2025-07-15 16:45:55
784
原创 c语言内存函数以及数据在内存中的存储
本文介绍了C语言中常用的内存操作函数和数据类型存储方式。主要内容包括:1. memcpy和memmove函数的功能与区别,前者不能处理内存重叠,后者可以;2. memset和memcmp函数的使用方法;3. 整数在内存中的存储方式(原码、反码、补码)和大小端字节序的概念;4. 浮点数在内存中的存储原理(IEEE 754标准),包括指数偏移和尾数处理规则。通过示例分析了整型和浮点型数据在内存中的存储差异,解释了程序运行结果差异的原因。这些底层知识对理解数据在计算机中的表示和处理具有重要意义。
2025-07-14 17:40:24
1055
原创 c语言:字符函数和字符串函数
本文介绍了C语言中常用的字符串处理函数及其实现原理,包括字符分类与转换函数(如tolower/toupper)、字符串操作函数(strlen/strcpy/strcat/strcmp)及其安全版本(strncpy/strncat/strncmp)、字符串查找函数(strstr)以及特殊用途函数(strtok/strerror/perror)。重点讲解了各函数的功能特性、参数说明、返回值类型和使用注意事项,并通过模拟实现揭示了其底层逻辑。特别强调了字符串处理中的安全边界问题,比较了常规函数与带长度限制的安全版
2025-07-12 19:44:15
626
原创 数组和指针回顾,练习与解析
本文总结了C语言中数组和指针的重要知识点。数组部分详细解析了数组名的三种含义,区分了sizeof、取地址和其他情况下的不同表现;同时涵盖了一维数组、字符数组和二维数组的使用方法。指针运算部分通过7道典型题目,深入讲解了指针的地址计算、类型转换等关键概念。这些内容为理解C语言的核心内存操作机制提供了清晰的指导。
2025-07-10 21:04:18
274
原创 c语言基础:指针(4)
本文主要介绍了C语言中函数指针及其相关应用。内容包括:1)函数指针变量的定义与使用,说明其存放函数地址的特性;2)函数指针数组的概念;3)转移表实现方法及回调函数原理,通过计算器案例演示;4)qsort函数的使用方法,包括整型数组和结构体排序的实现;5)qsort函数的模拟实现;6)sizeof与strlen操作符的对比分析。文章通过代码示例讲解了指针在函数调用、排序算法等场景中的灵活应用,重点阐述了回调函数机制及其在通用程序设计中的重要作用。
2025-07-09 21:58:47
756
原创 c语言基础:指针(3)
本文总结了C语言中数组和指针的关键知识点:1.数组名在sizeof单独使用时表示整个数组,&数组名取整个数组地址,其他情况表示首元素地址;2.数组传参实质是传递首元素地址,函数内无法直接获取元素个数;3.介绍了二级指针、指针数组和数组指针的概念与区别;4.解释了字符指针的特性;5.指出二维数组传参本质是传递第一行一维数组的地址。全文通过代码示例验证了各种指针类型在内存访问时的差异,涵盖了数组与指针的核心概念和常见用法。
2025-07-07 20:44:04
235
原创 c语言基础:指针(2)
本文主要讲解了C/C++中指针的相关知识:1. const修饰指针的三种形式及其限制;2. 野指针的成因及规避方法(初始化、防止越界等);3. assert断言的使用;4. 指针的传址调用与传值调用的区别。文章通过具体代码示例说明了指针使用中的常见问题和注意事项,包括const修饰指针的位置影响、野指针的危害及防范措施等。
2025-07-06 17:40:10
398
原创 c语言基础:指针(1)
本文主要介绍了指针在C语言中的核心概念和应用。内容包括:1)内存编址原理,解释内存单元编号与指针的关系;2)指针变量的定义和使用,包括取地址操作符(&)和解引用操作符();3)指针变量类型的重要性,决定了内存访问权限和步长;4)指针运算的三种形式:加减整数、指针相减和关系运算。文章通过32位机器示例说明指针变量大小固定为4字节,并强调void指针的通用特性。最后通过数组遍历和字符串长度计算等练习,展示了指针运算的实际应用。
2025-07-05 23:01:47
518
原创 c语言:操作符详解
本文系统介绍了C语言操作符相关知识点,包括:1.操作符优先级分类,详细列出14级运算符及其结合性;2.数据存储方式(补码)及移位操作规则;3.位操作符(&|^~)的使用和典型计算案例;4.单目、逗号、下标访问等特殊操作符;5.结构体成员访问方式;6.表达式求值中的整型提升和算术转换机制。文章通过具体示例演示了位运算过程,并指出移位操作的注意事项,最后还提供了两个典型练习题。全文以技术文档形式系统梳理了C语言操作符核心概念。
2025-07-04 23:52:11
731
原创 c语言基础:函数递归
本文介绍了C语言中递归的概念与应用。递归是函数自我调用的过程,将大问题分解为小问题直至最小子问题(如阶乘计算n!)。文章分析了递归的两个限制条件:存在终止条件和每次递归都更接近终止条件。对比了递归与迭代的优缺点:递归更易理解但效率低,迭代效率高但实现复杂。最后以斐波那契数列为例,指出递归存在重复计算的缺陷,建议使用循环优化时间复杂度至O(n)。
2025-07-03 22:41:59
234
原创 c语言基础:简易实现扫雷游戏(丐版)
该代码实现了一个简易扫雷游戏,主要功能包括:1)使用do-while循环实现游戏循环;2)采用11x11数组构建9x9扫雷区(含边界处理);3)埋设10个地雷;4)提供显示周围雷数的功能。项目分为三个文件:game.h(声明)、game.c(实现)和test.c(主逻辑)。游戏流程包括初始化棋盘、布置地雷、玩家排雷及胜负判断,通过合理输出提示增强交互性。
2025-07-02 17:18:37
303
原创 C语言基础:函数(详详解)
本文系统介绍了C语言中函数的概念、分类与使用。首先对比了数学函数与计算机函数的本质区别,包括执行机制、副作用、状态依赖等核心差异。然后详细讲解了库函数(标准库、第三方库)和自定义函数的使用方法,包括函数声明、定义、参数传递、返回值等语法要点。特别针对数组参数、嵌套调用、链式访问等高级用法进行了说明。最后深入解析了static和extern关键字的用法,包括作用域控制、生命周期管理和链接属性设置。文章通过丰富的代码示例,帮助读者全面掌握C语言函数的核心技术,为模块化编程打下坚实基础。
2025-05-06 13:50:14
1332
1
原创 C语言基础:数组
本文介绍了C语言中数组的基本概念和使用方法。主要内容包括:一维数组的创建、初始化、下标访问和内存存储方式;二维数组的结构、创建方法和内存连续性;C99变长数组的特点及使用限制。文章还提供了两端字符移动和二分查找两个练习案例,帮助理解数组的实际应用。通过sizeof运算符可以计算数组元素个数,同时强调数组在内存中的连续存储特性。
2025-04-22 14:44:59
908
原创 用C语言简易完成猜数字游戏
本文介绍了用C语言实现猜数字游戏的关键技术点。重点讲解了随机数生成的实现方法:1)使用rand()函数生成伪随机数;2)通过srand(time(NULL))设置变化的随机数种子;3)用rand()%100+1限定范围在1-100。游戏逻辑要求玩家猜测数字,程序根据猜测值给出大小提示,直到猜中为止。文章还提到当前代码存在的不足,如输入非数字时的处理问题和退出逻辑需要优化。该案例展示了如何将基础C语言知识应用到实际编程中。
2025-04-20 14:42:26
744
原创 C语言中分支和循环
C语言是结构化(顺序结构,选择结构,循环结构)的程序设计语言,我们可以使用if,switch实现分支结构,使用for,while,do while实现循环结构。
2025-04-19 18:57:44
1213
原创 初识C语言常见概念,数据类型和变量(2)
本文摘要: C语言基础语法包括五类语句(空语句、表达式语句、函数调用语句、复合语句、控制语句)、注释使用规范、数据类型分类(字符型、整型、浮点型、布尔型)及存储特性。重点讲解了变量创建规则、作用域区分(全局/局部变量)、算术/赋值操作符使用技巧,以及scanf/printf函数的格式化输入输出方法,特别强调数据类型长度、符号修饰符(signed/unsigned)的选择和类型转换注意事项。文章通过代码示例详细演示了各语法要素的实际应用场景和常见问题解决方案。
2025-04-18 22:11:05
1190
2
原创 初识C语言常见概念,数据类型和变量(1)
本文简要介绍了C语言的基础知识:1. C语言是一种计算机编程语言,最初为Unix系统开发而设计;2. 推荐使用VS2022等编译器;3. 解释了头文件(.h)与源文件(.c)的区别;4. 演示了第一个"Hello World"程序;5. 说明main函数作为程序入口的特性;6. 介绍了printf库函数和标准库;7. 讲解了字符与ASCII编码的关系;8. 强调字符串必须以\0结尾;9. 列举了常见转义字符的用法。文章通过实例代码和图示解释了C语言的基础概念,适合初学者快速了解C语言的核
2025-04-01 22:22:29
912
原创 就 看这一次
自我介绍:5年前便对计算机感兴趣,如今在普通二本院校,直至这学期转专业到计算机类学科,才开始真正意义上打出独属于自己的hello world,纵使天崩开局,我仍愿意相信热爱的力量。编程的目标:目前想走c++的学习方向,古话讲万事开头难,但个人认为,今后我的计算机学习道路会源源不断的遇到更多的困难,欲知后事如何,就看我每天能付出多少努力与汗水了。怎么学习编程/时间安排:网络上的学习资料要每天都看,每周至少会有四天不少于三个多小时的实操练习。
2025-03-30 15:22:11
136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人