- 博客(24)
- 收藏
- 关注
原创 【初阶数据结构】栈和队列
本文详细介绍了栈和队列的数据结构实现与应用。首先阐述了栈的概念(LIFO结构)及其数组实现方式,包含初始化、入栈、出栈等基本操作,并通过"有效的括号"算法题进行实践。队列部分(FIFO结构)采用链表实现,详细说明了初始化、入队、出队等操作。重点探讨了两种数据结构间的相互实现:用两个队列模拟栈的压栈/弹栈操作,以及用两个栈(一个负责输入、一个负责输出)实现队列的入队/出队功能。每种实现都提供了完整代码和测试验证,强调了对空栈/队列的判空处理及内存管理的重要性。
2025-12-26 20:24:45
613
原创 【初阶数据结构】双向链表
本文介绍了双向链表的基本概念和实现方法。首先概述了链表的8种分类,重点讲解带头双向循环链表。详细说明了双向链表的结构特点,包含指向前后节点的两个指针。通过代码示例展示了双向链表的核心操作:初始化、尾插、头插、尾删、头删以及销毁等功能的实现。每个操作都配有对应的图示说明和测试验证,确保代码的正确性。最后给出了完整的双向链表实现代码,包含头文件定义、函数实现和测试用例。该实现采用哨兵节点设计,使链表操作更加统一和安全。
2025-11-27 23:56:32
708
原创 【数据结构初阶】单链表
本文全面介绍了单链表的数据结构及其实现方法。首先分析了顺序表在插入删除操作和空间利用方面的不足,提出链表作为解决方案。详细阐述了链表的概念、结点结构以及在堆空间中的存储特性。重点讲解了单链表的各项基本操作实现,包括尾插、头插、尾删、头删、查找、指定位置插入删除等,并针对每种操作给出了详细的代码实现和测试示例。文章还提供了多个经典链表算法题的解答思路和实现代码,如链表反转、中间节点查找、链表合并等。全文通过大量图示和代码示例,系统性地展现了单链表的特性和操作原理,为理解和应用链表结构提供了实用指导。
2025-10-31 14:46:01
1087
1
原创 【初阶数据结构】顺序表
文章摘要:本文系统介绍了线性表中的顺序表实现。首先对比了线性表的逻辑连续性和物理存储特点,然后重点讲解了动态顺序表的实现方法,包括初始化、尾插、头插、尾删、头删等基本操作,并详细分析了每种操作的实现思路和代码逻辑。文章还提供了三个顺序表算法题(移除元素、删除重复项、合并有序数组)的解题思路和实现代码。通过多文件编程方式,展示了完整的动态顺序表实现过程,突出了动态内存管理、边界检查等关键编程技巧。
2025-09-16 23:05:28
1113
原创 【初阶数据结构】算法复杂度
本文介绍了数据结构与算法的基本概念及其效率评估方法。数据结构是组织数据的方式,包括数组、线性表、树等;算法则是将输入转换为输出的计算步骤。衡量算法效率主要看时间复杂度和空间复杂度,通常采用大O渐进表示法来估算。通过轮转数组的案例,对比了三种解决方案:暴力解法(O(N^2))、空间换时间(O(N))和三次逆置法(O(N)且空间O(1)),展示了如何优化算法效率。文章强调在实际应用中应关注算法的最坏情况时间复杂度,并提供了多个计算时间复杂度的示例。
2025-09-09 22:23:14
1039
2
原创 【C初阶】动态内存管理
摘要:本文介绍了C语言动态内存分配的必要性和实现方法。主要内容包括:1)动态内存分配的必要性,解释了固定大小数组的局限性;2)malloc和free函数的使用方法及注意事项;3)calloc和realloc函数的功能与区别;4)常见的动态内存错误类型及避免方法;5)几道典型的内存笔试题分析;6)柔性数组的概念、特点和使用优势。文章强调动态内存管理可以提高程序灵活性,但也需要注意内存泄漏、越界访问等问题。
2025-08-25 21:04:07
789
原创 【C初阶】自定义类型 -- 联合与枚举
本文介绍了联合体和枚举的使用方法。联合体(共用体)的特点是所有成员共用同一块内存空间,其大小至少是最大成员的大小,且需考虑内存对齐。通过礼品兑换单等示例展示了联合体节省空间的优势,并演示了利用联合体判断机器大小端的方法。枚举类型用于列举可能取值,默认从0开始递增,具有增加代码可读性、类型检查严格、便于调试等优点。相比#define定义常量,枚举更严谨且遵循作用域规则。
2025-08-24 14:00:00
237
原创 【C初阶】自定义类型--结构体
本文回顾了结构体的基本概念,包括结构体声明、变量初始化和特殊声明方式。重点讲解了结构体内存对齐规则,指出这是用空间换取时间的优化策略。文章比较了结构体传参的两种方式,推荐使用地址传参以提高效率。最后介绍了位段的概念及其内存分配特点,指出位段虽能节省空间但存在跨平台问题,适用于网络传输等特定场景。全文涵盖了结构体的核心知识点,包括声明、对齐、传参和位段应用。
2025-08-23 16:03:31
851
原创 【C初阶】数据在内存中的存储
本文介绍了整数和浮点数在内存中的存储方式。整数以补码形式存储,分为大端(高位字节在高地址)和小端(低位字节在高地址)两种字节序。通过代码示例演示了如何检测机器字节序,并分析了多个整数存储的练习题。浮点数存储遵循IEEE 754标准,由符号位S、指数E和有效数字M组成,解释了浮点数的存储和读取过程,并通过9.5的存储示例说明。文章还指出浮点数可能存在精度损失的问题,如1.2无法精确保存。
2025-08-22 21:50:01
1003
原创 C初阶【内存函数】
摘要:memcpy和memmove都是C语言中用于内存块拷贝的函数。memcpy实现简单内存拷贝,但当源和目标内存重叠时行为未定义;memmove则能正确处理重叠内存的情况。两者都需包含string.h头文件,参数包括目标地址、源地址和字节数,返回目标地址起始指针。示例代码展示了它们的模拟实现:memcpy采用逐字节正向拷贝,memmove则根据地址高低选择正向或反向拷贝以避免数据覆盖。实际应用中,推荐使用memmove以保证安全性。
2025-08-22 08:44:39
410
原创 【C初阶】字符函数和字符串函数
本文介绍了C语言中常用的字符串处理函数,包括字符分类函数(如isalpha、isdigit等)、字符转换函数(tolower/toupper)、字符串操作函数(strlen、strcpy、strcat、strcmp)及其安全版本(strncpy、strncat、strncmp),以及子串查找(strstr)和字符串分割(strtok)函数。详细说明了每个函数的功能、参数、返回值和注意事项,并提供了模拟实现代码。特别强调了字符串操作的安全性问题,如目标空间检查和'\0'处理,并比较了不同函数的优缺点。
2025-08-21 21:41:35
575
原创 【C初阶】指针
本文系统性地介绍了C语言中指针的核心概念和应用。主要内容包括:1.指针基础:阐述内存与地址的关系,指针变量的定义与使用,解引用操作符,以及指针的大小与类型意义;2.指针进阶:探讨const修饰指针、野指针成因与规避、assert断言以及指针在传址调用中的应用;3.指针与数组:分析数组名本质、指针访问数组方法、数组传参原理,并实现冒泡排序;4.高级指针:深入研究字符指针、数组指针、函数指针及其数组应用;5.实践应用:讲解qsort函数的使用与模拟实现,展示回调函数在排序算法中的运用。
2025-08-19 14:27:46
900
原创 【C初阶】操作符详解
本文系统介绍了C语言中各类操作符及其相关概念。主要内容包括:1) 操作符分类(算术、移位、位、赋值等);2) 进制转换(2/8/10/16进制互转);3) 原码、反码、补码表示方法;4) 移位操作符和位操作符的运算规则;5) 结构体声明、创建及成员访问方式;6) 操作符优先级与结合性;7) 表达式计算的整型提升和算术转换规则。文章通过具体示例详细讲解了二进制位操作、内存数据存储形式等底层原理,为深入理解C语言操作符提供了全面参考。
2025-07-19 15:49:15
1027
原创 【C初阶】函数递归
本文介绍了递归的概念及其在C语言中的实现。递归是函数自我调用的过程,具有"大事化小"的思想,包含递推和回归两个阶段。文章通过阶乘计算和整数逐位打印两个示例,展示了递归的具体应用和实现方法。同时指出递归必须设置限制条件以防止无限递归导致栈溢出。最后比较了递归与迭代的优缺点:递归代码简洁但效率较低,适合分治类问题;迭代性能更高,适合处理简单循环和大规模数据。在实际应用中应根据问题特点选择适当方法。
2025-05-24 15:09:30
337
原创 函数、数组实战:扫雷游戏的实现
本文详细介绍了如何在控制台环境下实现经典的扫雷游戏。文章分为两部分:扫雷游戏的分析设计和代码实现。首先,文章说明了扫雷游戏的基本功能,包括9x9的棋盘、随机布置10个雷、排查雷等。接着,文章详细描述了游戏的文件结构,包括game.c、test.c和game.h三个文件。在代码实现部分,文章逐步讲解了如何构建测试程序框架、创建菜单函数、使用switch语句进行选择、初始化棋盘、布置雷、排查雷等关键步骤。最后,文章提供了完整的代码汇总,并鼓励读者在此基础上进行扩展和优化。
2025-05-21 20:15:34
876
原创 【C初阶】函数
文章主要介绍了C语言中函数的基本概念、分类、使用方法和相关特性。首先,函数是完成特定任务的独立代码单元,能够减少重复代码,提高程序的模块化和可读性。C语言中的函数分为库函数和自定义函数,库函数如printf()和scanf(),而自定义函数则根据需求编写。文章详细讲解了如何定义和调用自定义函数,包括函数的参数、返回类型和函数体。此外,还介绍了形式参数和实际参数的区别,return语句的使用,以及数组作为函数参数的处理方法。最后,文章探讨了函数的嵌套调用、链式访问、声明与定义,static和extern
2025-05-15 00:06:21
925
原创 【C初阶】数组
本文详细介绍了数组的基本概念、创建、初始化、使用及其在内存中的存储方式。首先解释了一维数组的创建与初始化方法,包括如何通过下标访问数组元素以及使用sizeof计算数组元素个数。接着,文章探讨了二维数组的创建、初始化及其使用,强调二维数组在内存中也是连续存储的。最后,文章提到了C99标准中的变长数组(VLA),允许使用变量指定数组维度,但指出其使用存在一定限制。整体而言,本文为读者提供了关于数组的全面基础知识,适用于初学者理解和掌握数组在C语言中的应用。
2025-05-11 13:25:09
921
2
原创 【C初阶】循环语句
C语言的三种形式的程序流,我们已经熟悉了两种,这次我们来探究一下重复执行语句序列(循环)。C语言中有3种循环:while ,for , do while。
2025-05-08 20:51:51
1798
原创 【C初阶】分支语句
随着对 C 语言掌握程度的逐步加深,我们将迎来更具挑战性的编程任务。在解决复杂问题时,程序的控制与组织能力显得尤为关键。为此,C 语言精心设计了一系列强大的工具,帮助开发者构建出结构清晰、逻辑严谨的代码。接下来,我们将深入探索 C 语言中的分支语句。这一重要机制能够使程序依据不同的测试条件,灵活执行相应的代码块,从而实现多样化的功能。无论是处理业务逻辑判断,还是根据用户输入做出不同响应,分支语句都将发挥不可或缺的作用。与此同时,我们还会系统学习逻辑操作符。
2025-05-07 23:07:18
801
原创 【C初阶】scanf和printf函数介绍
printf()函数和scanf()函数能让用户可以和程序交流,它们是输出/输入函数,简称I/O函数。是库函数,给了一个标准,但是各个编译器的实现会有小部分差异。虽然printf()是输出函数,scanf()函数是输入函数,但它们的工作原理几乎相同。两个函数都使用格式字符串和参数列表。我们先介绍printf()函数,再介绍scanf()函数。
2025-05-03 20:09:02
1905
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅