- 博客(41)
- 收藏
- 关注
原创 数据结构:双向链表(3)
本文介绍了四种链表经典算法题的解题思路和实现方法:1. 链表的中间节点 - 使用快慢指针法(时间复杂度O(n),空间复杂度O(1));2. 合并两个升序链表 - 通过双指针比较和拼接(时间复杂度O(m+n));3. 链表分割 - 创建两个子链表分别存储小于x和大于等于x的节点;4. 链表回文结构 - 将链表值存入数组后使用双指针验证。文章详细解析了每种算法的核心思路、代码实现和复杂度分析,重点讲解了快慢指针、双指针比较等链表操作技巧,适用于理解链表操作的核心思想。
2025-11-23 13:47:53
978
12
原创 数据结构:双向链表(1~2)
本文深入讲解了双向链表的概念与实现,对比分析了顺序表与链表的优缺点,并提供了链表相关算法题的解题思路。 文章首先介绍了双向链表的结构特点:每个节点包含前驱和后继指针,支持双向遍历和高效的插入删除操作。详细讲解了带头双向循环链表的实现方法,包括初始化、尾插、头插、尾删、头删、销毁等核心操作的代码实现和逻辑分析。 在顺序表与链表的对比部分,文章指出顺序表适合频繁随机访问的场景,而链表更适合数据动态变化的场景。最后通过"移除链表元素"和"反转链表"两个经典算法题,展示了链表
2025-11-19 13:30:28
1179
73
原创 数据结构:双向链表(1~2)
本文详细讲解了双向链表的概念、结构及其实现方法。首先介绍了双向链表的基本概念和结构特点,包括带头双向循环链表的实现。随后通过代码示例展示了双向链表的初始化、尾插、头插、尾删、头删、销毁等基本操作,并分析了顺序表与链表的异同点。文章还通过两个链表算法题(移除链表元素和反转链表)进一步巩固相关知识。最后总结全文内容,帮助读者全面理解双向链表的实现原理和应用场景。
2025-11-19 13:28:39
905
11
原创 数据结构:双向链表(2)
本文介绍了双向链表的查找、插入和删除操作实现方法,包括在指定位置前后插入节点、查找特定节点以及删除节点的代码实现。通过对比顺序表和链表在存储结构、访问效率等方面的差异,分析了各自的适用场景。同时讲解了两道链表算法题:移除特定值节点和反转链表,提供了迭代法解题思路和实现代码。文章涵盖了双向链表操作的核心逻辑与指针调整技巧,以及链表在算法题中的应用。
2025-11-16 09:27:52
1250
64
原创 数据结构:双向链表(1)
本文讲解了带头双向循环链表的数据结构及其实现。双向链表每个节点包含前驱和后继指针,支持双向遍历和高效插入删除操作。文章详细介绍了链表的初始化、尾插、头插、尾删、头删等核心操作,并给出了完整的C语言实现代码。通过图示和代码解析,展示了双向链表优于单链表的特性,如O(1)时间复杂度的尾插尾删操作。最后提供了一个测试用例,验证了各功能的正确性。这种链表结构在工程实践中广泛应用,具有处理边界情况简单、操作效率高等优点。
2025-11-13 14:29:55
1073
33
原创 数据结构:单链表
本文系统讲解了单链表的数据结构知识。主要内容包括:1.单链表的基本概念:通过节点指针串联的非连续线性结构,每个节点包含数据域和指针域;2.单链表的实现方法:详细介绍了节点创建、头插尾插、头删尾删、查找、指定位置插入删除等核心操作的代码实现;3.链表分类:从连接方向和头节点角度讲解了单链表、双链表、循环链表等不同结构的特点;4.性能分析:对比顺序表,说明链表在插入删除操作上的优势(时间复杂度O(1))。文章通过代码示例和图示解析,全面阐述了单链表的原理和实现要点。
2025-11-10 08:00:00
1210
80
原创 数据结构:单链表(2)
本文详细讲解了单链表的实现与操作,主要包括:1. 单链表节点的查找、插入和删除操作,包括在指定位置前后插入元素、删除指定位置及其后节点等核心函数实现;2. 通过示例代码完整展示了单链表的创建、增删改查等操作;3. 介绍了链表的分类方法,包括按连接方向(单/双向、循环/非循环)和是否有头节点进行分类。文章重点分析了单向不带头不循环链表的具体实现,为后续讲解双向带头链表奠定了基础。所有函数均配有详细注释和逻辑分析,并提供了完整的测试代码。
2025-11-05 16:33:09
1208
77
原创 数据结构:单链表(1)
本文详细讲解了单链表的基本概念、结构特点和实现方法。首先介绍了单链表相对于顺序表的优势:头部插入删除时间复杂度O(1)、无需扩容、避免空间浪费。然后详细阐述了单链表节点的结构组成(数据域和指针域)及C语言实现。重点讲解了单链表的核心操作:尾插、头插、尾删、头删,并提供了完整的代码实现和示例演示。文章还包含链表打印、销毁等辅助功能的具体实现,以及处理各种边界情况的注意事项。通过火车车厢的比喻帮助理解链表的非连续物理存储特性,最后给出了完整的测试代码和运行结果。
2025-11-02 13:03:49
1063
55
原创 数据结构:顺序表讲解(总)
本文系统讲解了顺序表的相关知识,包括线性表概念、顺序表分类(静态/动态)及实现细节。重点阐述了动态顺序表的核心操作(初始化、增删查改)及其时间复杂度分析,并提供了完整代码示例。文章还通过力扣算法题(移除元素、去重、合并有序数组)演示顺序表的实际应用,采用双指针/三指针法优化解法。最后强调内存管理(销毁函数)的重要性,为后续链表学习奠定基础。全文兼顾理论与实战,适合数据结构初学者系统学习顺序表。
2025-10-26 08:20:04
1335
29
原创 数据结构:顺序表讲解(2)
本文介绍了动态顺序表的实现方法,包括查找、销毁、指定位置插入/删除等操作,并给出了完整的代码示例。通过三个文件(头文件、实现文件、测试文件)展示了顺序表的具体实现过程。文章还讲解了三个基于顺序表的算法题:移除元素(双指针法)、删除有序数组重复项(快慢指针法)、合并两个有序数组(三指针法),分析了各算法的核心逻辑和时间复杂度。最后预告了后续将更新链表相关内容。
2025-10-24 07:45:00
1324
70
原创 数据结构:顺序表讲解(1)
本文介绍了顺序表的相关知识,主要包括:顺序表的概念与结构(基于数组的线性结构)、分类(静态和动态顺序表)、以及动态顺序表的实现。重点讲解了动态顺序表的初始化、扩容机制,以及尾插、头插、尾删、头删等核心操作的实现方法和时间复杂度分析(尾插/删O(1),头插/删O(n))。通过对比静态顺序表,突出了动态顺序表可扩容的优势,并详细说明了基于realloc的扩容策略(默认2倍增长)及其效率考量。文章通过代码示例和图示帮助理解顺序表的底层实现原理。
2025-10-22 09:08:06
1313
60
原创 C语言数据结构:算法复杂度(总)
本文系统介绍了算法复杂度分析的核心知识,包括: 数据结构与算法基础概念:数据结构是数据组织方式,算法是计算步骤,二者共同决定程序效率; 复杂度衡量标准:时间复杂度(运算速度)和空间复杂度(内存消耗)是算法评价的核心指标; 分析方法:采用大O渐进表示法,重点关注最坏情况下的时间/空间增长趋势; 常见复杂度类型:从O(1)到O(n!)的效率对比,以及典型应用场景; 实际案例:通过轮转数组问题对比不同解法,展示如何平衡时间与空间复杂度。文章强调算法复杂度分析是优化程序性能的关键基础。
2025-10-19 13:59:34
922
22
原创 C语言数据结构:算法复杂度(2)
本文深入解析了算法复杂度中的空间复杂度概念及其计算方法。空间复杂度衡量算法运行过程中额外临时开辟的空间量,使用大O渐进表示法进行评估。文章详细介绍了不同阶数的空间复杂度,包括常数阶O(1)、线性阶O(n)、二维阶O(n×m)和递归阶O(n),并通过具体代码示例进行说明。此外,文章对比了常见时间复杂度类型(从O(1)到O(n!))的性能特征和适用场景,提供了算法优化案例(如数组轮转问题的两种解法),展示了"空间换时间"的优化思路。最后强调空间复杂度分析对算法优化的重要性,为后续数据结构学习
2025-10-18 08:44:17
1379
54
原创 C语言数据结构:算法复杂度(1)
本文介绍了数据结构与算法的基本概念及其重要性,重点讲解了算法效率的衡量方法——时间复杂度和空间复杂度。通过具体代码示例(如轮转数组、冒泡排序等),阐述了如何分析算法的时间复杂度,并详细说明了大O渐进表示法的应用规则。文章指出,在评估算法时应关注最坏情况下的时间复杂度,并强调数据结构与算法对于编程能力提升的关键作用,特别是在企业招聘笔试面试中的重要性。最后总结了复杂度分析的基本方法和常见场景,为后续学习数据结构与算法打下基础。
2025-10-15 09:30:34
1419
57
原创 C语言⽂件操作讲解(1)
本文介绍了C语言中文件操作的核心概念。主要内容包括:1)文件的作用是实现数据持久化存储,避免程序退出后数据丢失;2)文件分为程序文件和数据文件,重点讲解了数据文件的持久性和共享性特点;3)区分了文本文件(ASCII存储)和二进制文件(直接二进制存储)的格式差异;4)详细说明了文件指针、标准流(stdin/stdout/stderr)的概念,以及使用fopen/fclose函数进行文件打开和关闭操作的要点。文章通过具体示例和对比分析,帮助读者理解文件操作的基本原理。
2025-10-15 09:18:30
1015
13
原创 C语言⽂件操作讲解(总)
本文系统讲解了C语言文件操作的核心知识,主要包括:文件的作用(持久化存储数据)、分类(程序文件与数据文件)、存储形式(文本文件与二进制文件)。详细介绍了文件操作的完整流程:打开与关闭(fopen/fclose)、顺序读写(fgetc/fputc等系列函数)、随机读写(fseek/ftell/rewind)。重点阐述了文件结束判定方法(feof/ferror)和文件缓冲区的运作机制(fflush函数)。通过实例演示了各类文件操作函数的使用场景和注意事项,为后续学习数据结构和C++打下坚实基础。文章采用比喻方式
2025-10-13 08:00:00
1523
20
原创 C语言⽂件操作讲解(3)
本文讲解了C语言文件操作中的随机读写、读取结束判定及文件缓冲区相关知识。主要内容包括:1. 随机读写函数fseek()、ftell()、rewind()的使用方法及示例;2. 文件读取结束的判定方法,包括fgetc()、fgets()和feof()等函数的返回值判断;3. 文件缓冲区的工作原理及fflush()函数的作用。文章通过实例代码详细说明了各项功能的实现方式,帮助读者掌握C语言文件操作的核心技术。
2025-10-12 07:00:00
1368
27
原创 C语言⽂件操作讲解(1~2)
本文系统讲解了C语言文件操作的核心知识,包括:1. 文件基础概念:阐述文件持久化存储的重要性,区分程序文件与数据文件,比较文本文件与二进制文件的存储特点。2. 文件操作流程:详细说明文件指针(FILE*)的作用,演示fopen/fclose函数的使用方法及注意事项。3. 顺序读写函数:全面介绍8个关键函数:字符读写(fgetc/fputc)、字符串读写(fgets/fputs)、格式化读写(fscanf/fprintf)以及二进制块读写(fread/fwrite),通过代码示例说明其用法和常见问题。4. 错
2025-10-11 00:00:00
1175
8
原创 C语言⽂件操作讲解(2)
本文介绍了C语言中文件顺序读写的相关函数,包括fgetc、fputc、fgets、fputs、fscanf、fprintf、fread和fwrite。详细讲解了每个函数的功能、参数、返回值及使用示例,重点区分了文本文件和二进制文件的操作差异。文章还涵盖了文件操作的关键概念,如文件指针、错误处理(feof和ferror)以及缓冲区管理等。通过具体代码示例,展示了如何正确使用这些函数进行文件读写操作,并指出了常见错误及注意事项,为C语言文件操作提供了实用的参考指南。
2025-10-10 06:54:55
1119
18
原创 假期过后博主回归
国庆假期彻底“放飞自我”后,才惊觉断更了好些天,实在抱歉让大家久等了 🙏 假期里沉迷放松的我,已经狠狠“反省”过啦~ 从今天起,咱们的C语言干货小课堂正式重启!一起加油,把C语言彻底拿下吧 💪。——链表、栈、队列、树这些“编程内功”,咱们一步一个脚印打扎实!的相关知识,搞定这块硬骨头后,就会进入。接下来的内容安排,先带大家吃透。亲爱的小伙伴们,久违啦!
2025-10-09 13:36:21
194
1
原创 C语言字符函数和字符串函数以及内存函数的讲解(汇总)
本文系统介绍了C语言中常用的字符和字符串处理函数,包括字符分类函数(如isalpha、isdigit等)、字符转换函数(tolower、toupper)、字符串操作函数(strlen、strcpy、strcat等)及其模拟实现方法,以及内存操作函数(memcpy、memmove等)。文章详细讲解了每个函数的功能、参数、返回值和使用注意事项,并通过代码示例演示了如何模拟实现这些函数。内容涵盖字符串长度计算、拷贝、连接、比较等基本操作,以及内存块的复制、设置和比较等高级功能,为C语言开发者提供了全面的字符串和内
2025-09-28 08:15:21
1044
25
原创 动态内存管理(2)
摘要:本文深入探讨C语言动态内存管理中的常见错误及柔性数组知识。重点解析了5种典型错误:解引用NULL指针、内存越界访问、释放非动态内存、释放部分动态内存及重复释放,并给出预防建议。同时介绍了柔性数组的特性:必须位于结构体末尾,使用malloc一次性分配结构体与数组内存,且内存连续无需单独释放。文章通过代码示例详细说明每种错误场景及解决方案,帮助开发者规避内存管理陷阱,提升程序稳定性。
2025-09-23 08:32:28
887
23
原创 自定义类型讲解
本文介绍了C语言中结构体、联合体和枚举类型的核心知识。结构体部分详细讲解了类型声明、变量创建与初始化、成员访问操作符(.和->)以及内存对齐规则(包括嵌套结构体和对齐数修改)。联合体部分阐述了其共享内存的特性、大小计算方法和实际应用(如判断字节序)。枚举类型则介绍了声明方式、默认值规则及其优点(增强可读性、类型检查等)。全文通过代码示例和内存布局图示,系统性地讲解了这些复合数据类型的定义、使用及底层原理,为C语言开发者提供了全面的参考指南。
2025-09-20 14:33:46
1126
31
原创 动态内存管理(1)
本文介绍了C语言动态内存分配的核心机制,包括malloc、free、calloc和realloc函数的使用方法。动态内存分配解决了静态内存固定大小的限制,允许程序在运行时根据需要申请和释放内存空间。文章详细讲解了malloc函数申请未初始化内存、calloc函数自动初始化为0的特性,以及realloc函数调整内存大小的两种场景。重点强调了内存分配失败检查和及时释放的重要性,避免内存泄漏和野指针问题。通过代码示例演示了动态内存管理的完整流程,包括申请、使用、扩展和释放内存的操作规范。
2025-09-20 14:27:07
751
19
原创 自定义类型:结构体、联合与枚举(2)
本文介绍了C语言中联合体(Union)和枚举(Enum)的相关知识。联合体是一种特殊数据类型,所有成员共享同一块内存空间,大小由最大成员决定,并需满足内存对齐要求。文章详细讲解了联合体的声明方式、特点、内存布局及大小计算规则,并通过代码示例演示了如何利用联合体判断系统字节序。枚举类型则用于列举可能的取值,具有增加代码可读性、支持类型检查等优点。全文通过实例代码和图示,深入浅出地解析了这两种自定义类型的使用方法和注意事项。
2025-09-17 08:46:14
828
40
原创 自定义类型:结构体、联合与枚举(1)
本文讲解了C语言结构体的相关知识点,包括结构体类型的声明、变量的创建与初始化、成员访问操作符以及内存对齐规则。主要内容有:1.结构体声明语法及typedef简化;2.变量创建的三种方式和两种初始化方法;3.成员访问操作符.和->的使用场景;4.内存对齐规则及其计算方式,包括嵌套结构体的处理。通过实际代码示例详细说明了结构体内存对齐的原理和计算方法,帮助理解结构体在内存中的存储方式。最后提到可用#pragma指令修改默认对齐数。文章旨在全面介绍结构体的基础概念和重要特性。
2025-09-13 15:58:23
781
32
原创 指针学习知识
本文系统介绍了C语言中指针的核心概念与应用,主要内容包括:内存和地址的基本概念、指针变量的声明与使用、指针运算规则、const修饰指针的用法、野指针的成因与防范、指针在函数传参和数组访问中的应用、多级指针及特殊指针类型(如void*、字符指针、数组指针、函数指针等)。文章通过大量代码示例详细讲解了指针操作、指针与数组/函数的关系、指针的类型意义等知识点,并分析了指针使用中的常见错误和注意事项。最后总结了指针在C语言程序设计中的重要性,为读者提供了全面的指针知识体系。
2025-09-10 08:27:15
967
16
原创 C语⾔内存函数
本文介绍了C语言中四个重要的内存操作函数:memcpy、memmove、memset和memcmp。memcpy用于内存块拷贝但不处理重叠区域;memmove功能类似但能正确处理内存重叠;memset用于设置内存块内容;memcmp用于比较两个内存块内容。文章详细讲解了每个函数的使用方法、参数说明,并提供了代码示例和模拟实现。特别强调了memcpy和memmove在处理重叠内存时的区别,以及这些函数在实际编程中的应用场景。通过具体示例展示了如何正确使用这些函数进行内存操作,并分析了实现原理。
2025-09-10 08:18:00
1122
16
原创 C语言字符函数和字符串函数
本文系统梳理C语言字符与字符串操作函数,涵盖分类、转换及核心字符串函数的功能解析与实现。主要内容包括:字符分类函数(如islower)和转换函数(如toupper)的用法;字符串长度计算函数strlen、拷贝strcpy、追加strcat、比较strcmp的功能特点及模拟实现;安全版本函数strncpy、strncat、strncmp的使用规范与实现;字符串查找函数strstr的原理及复杂模拟逻辑;以及字符串分割函数strtok的使用方法与注意事项。通过对比标准库函数特性与手动实现代码,帮助理解字符串操作的
2025-09-07 09:12:25
989
7
原创 C语言字符函数和字符串函数(2)
本文介绍了C语言中5个字符串处理函数的使用方法及模拟实现:1. strncpy函数(带长度限制的字符串拷贝)2. strncat函数(带长度限制的字符串追加)3. strncmp函数(带长度限制的字符串比较)4. strstr函数(字符串查找)5. strtok函数(字符串分割)文章详细讲解了每个函数的参数、返回值、注意事项,并提供了完整的模拟实现代码示例。这些函数比基础版本更安全灵活,能有效避免缓冲区溢出等问题,是C语言字符串处理的重要工具。
2025-09-06 14:44:53
840
12
原创 牛客一题讲解
Alice 和 Bob 很喜欢一起打牌,与扑克牌不同,他们打的牌的牌名只由单个大写字母组成,并没有 1−101-101−10 的数字牌。今天,他们又约着一起玩打对子,打对子的规则是:每个人会得到一定数量的牌,然后每个人可以任意次将两张相同牌名的牌作为对子打出,最后剩下牌少的人将获得胜利,如果剩余牌数相同,则收获平局,双方都无法获胜。由于牌太多,Alice 整理牌整理不过来了,因此她决定向你求助,询问自己最后会剩下多少张牌,以及自己是否能战胜 Bob 。第一行输入一个正整数 nnn (&n
2025-09-03 09:13:41
670
5
原创 C语言字符函数和字符串函数(1)
本文介绍了C语言中常用的字符和字符串处理函数,主要包括三类内容:1.字符分类函数(如isalpha、isdigit等)和字符转换函数(tolower、toupper);2.字符串操作函数strlen、strcpy、strcat、strcmp的功能说明及模拟实现方法;3.重点讲解了这些字符串函数的注意事项和使用规范,包括参数要求、返回值规则等。文章通过代码示例详细展示了各函数的应用场景和实现原理,为C语言字符串处理提供了实用参考。
2025-09-03 08:44:12
885
8
原创 数据在内存中的存储
本篇文章将讲解整数和浮点数在内存中存储(以float为例)知识的相关内容,为本章节知识的内容。一、整数在内存中的存储整数的2进制表⽰⽅法有三种,即原码、反码和补码。同时,整数分为有符号(signed)与无符号型(unsigned),先介绍下有符号与无符号型:首先C语言中signed 和unsigned 关键字修饰字符型和整型类型的,signed 关键字,表示该类型带有正负号,包含负值;
2025-08-29 09:00:14
440
3
原创 数据在内存中的存储
本篇文章将讲解整数和浮点数在内存中存储(以float为例)知识的相关内容,为本章节知识的内容。一、整数在内存中的存储整数的2进制表⽰⽅法有三种,即原码、反码和补码。同时,整数分为有符号(signed)与无符号型(unsigned),先介绍下有符号与无符号型:首先C语言中signed 和unsigned 关键字修饰字符型和整型类型的,signed 关键字,表示该类型带有正负号,包含负值;
2025-08-29 08:58:16
731
1
原创 指针讲解(完)
本篇文章将讲解字符指针变量,数组指针变量,函数指针变量,函数指针数组知识的相关内容,为本章节知识的内容,指针知识也将讲解完成。整形指针变量:存放的是整形变量的地址,能够指向整形数据的指针。浮点型指针变量:存放浮点型变量的地址,能够指向浮点型数据的指针。数组指针变量同理:存放的是数组的地址,能够指向数组的指针变量。代码如下(例):int (*p)[10];该例子:p先和*结合,说明p是⼀个指针变量,然后指针指向的是⼀个⼤⼩为10个整型的数组。所以p是 ⼀个指针,指向⼀个数组,叫数组指针。
2025-08-27 09:16:31
764
2
原创 指针讲解(3)
本篇文章将讲解数组名的理解,使⽤指针访问数组,⼆级指针、指针数组、指针数组模拟⼆维数组知识的相关内容,为本章节知识的内容。一、
2025-07-31 10:09:48
905
2
原创 指针讲解(2)
本篇文章将讲解const修饰指针,指针变量野指针,指针的使⽤和传址调⽤知识的相关内容,为章节知识的内容。以上就是今天要讲的内容,本文介绍了 const修饰指针,指针变量。
2025-07-27 15:06:50
927
2
原创 扫雷游戏及代码实现
扫雷》是一款经典的单人电脑游戏,旨在揭开一个方块网格,并避免触发隐藏的地雷。每个方块可能包含数字(表示周围地雷数量)或者地雷。玩家需要利用数字信息来推断哪些方块是安全的,并标记可能包含地雷的方块。int i,j;for(i=0;i<11;j<11;int i,j;for(i=0;i<10;i<10;j<10;for(i=n-1;
2025-06-21 09:16:00
1014
3
原创 C语言分支循环语句
C语言是一种广泛使用的编程语言,它提供了强大的控制结构来处理各种逻辑和重复任务。其中,分支语句和循环语句是C语言中非常重要的组成部分。本文将详细介绍C语言中的分支和循环语句,并通过示例代码来帮助大家更好地理解和使用它们。以上就是今天要讲的内容,本文仅仅简单介绍了if语句的使用。C语言中的分支和循环语句是编程中非常重要的控制结构。通过合理使用这些语句,可以编写出逻辑清晰、功能强大的程序。希望本文的介绍和示例代码能帮助大家更好地理解和使用C语言中的分支和循环语句。
2025-05-02 09:31:01
418
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅