- 博客(61)
- 收藏
- 关注
原创 Linux环境下的C语言编程(五十二)
数组与广义表对比分析:数组采用连续存储结构,元素类型相同,支持O(1)随机访问,但大小固定;广义表采用链式存储,支持异构数据和递归嵌套结构,具有动态扩展能力,但访问效率为O(n)。数组存储效率高(无额外开销),适合密集数据;广义表灵活性好(支持复杂结构),但存在指针和标记位开销。操作复杂度方面,数组插入/删除需移动元素(O(n)),而广义表通过指针修改可实现O(1)头部插入。内存管理上,数组可批量分配释放,广义表需递归处理每个节点。
2025-12-26 17:51:09
925
原创 Linux环境下的C语言编程(五十一)
本文介绍了广义表的扩展表示方法和高级操作。主要内容包括:1)扩展节点结构,支持多种原子类型和引用计数;2)广义表的存储结构变体,如二叉树表示和头尾链表表示法;3)高级操作,如递归与非递归遍历算法、模式匹配以及序列化/反序列化方法。这些技术扩展了广义表的功能,使其能更好地处理复杂数据结构和实现高效操作。
2025-12-26 17:43:02
197
原创 Linux环境下的C语言编程(五十)
广义表是线性表的推广,可包含原子元素或子表,具有递归定义、层次结构和共享性等特点。其节点定义使用共用体区分原子节点和表节点,表节点包含头尾指针。基本操作包括创建、求表长/深度、获取表头/表尾、插入/删除元素、复制、遍历和销毁等。关键操作采用递归实现,如求深度和复制,同时需要注意内存管理,特别是销毁操作要避免内存泄漏。广义表适用于处理嵌套结构数据,其递归特性与树形结构相契合。
2025-12-26 17:36:34
543
原创 Linux环境下的C语言编程(四十九)
行号(row):元素在矩阵中的行位置列号(col):元素在矩阵中的列位置值(value):元素的实际值节省存储空间:只存储非零元素提高运算效率:避免对零元素的无意义运算适合大型稀疏矩阵:内存消耗大大减少。
2025-12-26 17:29:36
328
原创 Linux环境下的C语言编程(四十八)
本文介绍了数组的基本概念和使用方法,重点讲解了一维数组和二维数组。一维数组是相同类型元素的线性集合,具有连续存储和下标访问特性,示例展示了声明、初始化、访问和遍历操作。二维数组则是"数组的数组",以行优先方式存储,需要两个下标访问,文中提供了矩阵操作的完整示例,包括初始化、遍历、行列计算等。两种数组形式都通过C语言代码演示了实际应用场景,如学生成绩管理、投票统计等,展现了数组在数据处理中的基础作用。
2025-12-26 17:23:08
362
原创 Linux环境下的C语言编程(四十七)
动态字符串解决了固定大小字符串的内存限制问题,通过动态内存管理实现灵活扩展。其核心结构包含数据缓冲区、当前长度和总容量,采用1.5倍指数增长策略平衡内存利用与性能。实现包括创建/销毁、容量扩展、字符串设置/追加等基础操作,以及格式化、插入删除、子串提取等高级功能。相比固定增量和倍数增长,1.5倍策略在重新分配次数和内存利用率间取得平衡,避免了频繁内存操作带来的性能损耗。动态字符串通过预分配机制减少内存分配次数,提升字符串操作效率。
2025-12-19 18:04:09
148
原创 Linux环境下的C语言编程(四十六)
本文介绍了两种字符串查找算法:朴素查找算法和KMP算法。朴素查找算法通过双重循环逐个比较字符,时间复杂度为O(n*m),包含完整实现代码和可视化演示。KMP算法则利用部分匹配表(LPS)优化查找过程,避免不必要回溯,将时间复杂度降至O(n+m)。文章详细展示了LPS表的计算过程,并提供了KMP算法的完整实现及优化版本。两种算法都包含调试信息和性能分析,帮助理解其工作原理和效率差异。
2025-12-19 17:43:34
144
原创 Linux环境下的C语言编程(四十五)
本文介绍了C语言中字符串比较函数strcmp的使用与实现原理。主要内容包括:1. strcmp基本用法,通过字符ASCII码逐位比较返回负/零/正值;2. 不同编译器的返回值差异,强调只保证符号不保证具体数值;3. 常见应用场景如字符串排序、命令处理;4. 典型错误用法警示;5. 扩展函数strncmp(安全比较)、strcasecmp(不区分大小写)和memcmp(内存比较)的特性与区别。文章通过代码示例详细演示了各函数的正确使用方式,并指出标准库函数与自定义实现的注意事项。
2025-12-19 17:32:25
272
原创 Linux环境下的C语言编程(四十四)
本文介绍了字符串操作函数的基本实现与安全注意事项。strlen函数通过指针遍历或字符计数实现字符串长度计算。重点讨论了strcpy的安全问题,包括缓冲区溢出风险,并提供了三种解决方案:自定义安全拷贝函数、snprintf替代方案以及strncat安全连接方法。文中通过代码示例展示了如何实现带长度检查的字符串操作,强调了对目标缓冲区大小的验证和空字符终止的重要性,以避免常见的内存越界问题。这些安全实践对开发健壮的字符串处理程序至关重要。
2025-12-19 17:20:53
254
原创 Linux环境下的C语言编程(四十三)
本文介绍了C语言中字符串的基本概念和存储特性。字符串是由字符组成的有序序列,以'\0'结尾。字符串可以通过字符数组、字符指针或直接初始化三种方式定义。字符串字面量存储在只读段,相同字面量可能共享内存且不可修改,而字符数组会在栈上创建可修改的副本。文章通过代码示例展示了字符串的不同表示方式和存储特性差异。
2025-12-19 17:09:46
240
原创 Linux环境下的C语言编程(四十二)
本文介绍了优先队列的两种实现方式及其性能对比。优先队列是一种按优先级出队的特殊队列,主要实现方式包括数组/链表(朴素实现)和堆实现。数组实现入队快(O(1))但出队慢(O(n)),而堆实现通过完全二叉树结构保证了入队和出队均为O(logn)的高效操作。文章详细展示了最大堆和最小堆的C语言实现代码,包括初始化、入队、出队等核心操作,并通过时间复杂度对比说明堆实现更优(插入O(logn)、删除O(logn)、获取最大O(1))。堆实现特别适合需要频繁插入删除的场景。
2025-12-12 18:14:54
343
原创 Linux环境下的C语言编程(四十一)
本文对比分析了链队列和循环队列的时间与空间复杂度。时间方面,两种队列的入队、出队操作均为O(1):链队列通过头尾指针直接访问,循环队列利用数组随机访问特性。空间方面,链队列每个元素需额外存储指针(约24字节/元素),空间利用率仅16.7%;循环队列预分配连续内存,空间利用率可达99%,且更缓存友好。总体而言,循环队列在内存利用率和访问效率上更具优势,而链队列则更灵活但内存开销较大。
2025-12-12 18:08:44
456
原创 Linux环境下的C语言编程(四十)
本文介绍了链队列和循环队列两种实现方式。链队列采用链表结构实现,具有动态内存分配、无溢出限制的特点,但存在指针空间开销;循环队列使用数组实现,通过循环利用空间解决假溢出问题,具有访问速度快、内存连续的优势,但容量固定。文章详细展示了两种队列的结构定义、基本操作实现(初始化、入队、出队等)和特点比较,并通过测试示例演示了它们的实际应用场景。最后总结了两种队列的适用情况:链队列适合大小不确定的场景,而循环队列适用于大小确定且对性能要求高的场合。
2025-12-12 18:00:25
462
原创 Linux环境下的C语言编程(三十九)
本文介绍了队列数据结构的基本操作实现。首先定义了队列的结构体,包含数据数组、队头指针、队尾指针和当前大小。详细讲解了初始化、判空、判满、入队、出队、查看队头队尾、获取大小和清空队列等核心操作的C语言实现方法。通过示例代码展示了循环队列的操作流程,包括边界情况处理。文章最后总结了队列的数学定义、状态转换图和关键特性,强调其先进先出(FIFO)特性、O(1)时间复杂度的基本操作以及顺序性、有限访问等核心特点。
2025-12-12 17:34:06
289
原创 Linux环境下的C语言编程(三十八)
摘要:队列是一种遵循先进先出(FIFO)原则的线性数据结构,具有严格的元素访问限制:只能从队尾插入元素,从队头删除元素。其基本特性包括动态大小变化和顺序保持性。队列的抽象图示展示了元素从队尾入队、从队头出队的过程,而循环队列则通过循环利用数组空间提高存储效率。典型操作包括入队(Enqueue)和出队(Dequeue),队列状态会随着这些操作动态变化,可能为空、部分填充或达到最大容量。
2025-12-12 17:23:09
857
原创 Linux环境下的C语言编程(三十七)
本文介绍了栈的五大经典应用场景及其实现原理。主要内容包括:1)数制转换通过栈实现进制转换的余数存储与反向输出;2)括号匹配利用栈检查嵌套结构的对称性;3)行编辑程序使用栈实现文本编辑的撤销功能;4)迷宫求解通过栈实现深度优先搜索的路径回溯;5)表达式求值借助双栈结构处理运算符优先级。这些应用均体现了栈"后进先出"的核心特性,在解决具有嵌套、回溯、优先级等问题时展现出独特优势。文中通过C语言代码示例和分步图解,清晰展示了每种应用的具体实现过程和栈的工作机制。
2025-12-05 18:54:19
681
原创 Linux环境下的C语言编程(三十六)
本文介绍了栈的典型应用场景及实现方式。主要内容包括:1)函数调用栈的工作原理;2)栈在表达式求值、括号匹配中的应用;3)浏览器前进/后退功能的栈实现;4)深度优先搜索的栈实现。对比了数组栈和链表栈的优缺点,分析了时间复杂度。最后总结了栈在后进先出场景中的不可替代性,如函数调用、表达式求值、回溯算法等核心功能。文章提供了多个代码示例,包括最小栈实现、栈模拟队列等经典问题解决方案。
2025-12-05 17:43:03
413
1
原创 Linux环境下的C语言编程(三十五)
本文介绍了栈的基本概念及其C语言实现。栈是一种FILO/LIFO(先进后出/后进先出)的线性数据结构,仅允许在栈顶进行操作。文章详细阐述了栈的5个基本操作(push、pop、peek、isEmpty、size)及其O(1)时间复杂度特性,并提供了三种C语言实现方式:固定大小的数组栈(预定义容量)、链表栈(动态大小)和动态数组栈(可自动扩容)。每种实现方式均包含完整的初始化、操作和销毁函数,并附有演示示例。通过对比三种实现方式,展现了栈数据结构在不同场景下的灵活应用。
2025-12-05 17:37:20
296
原创 Linux环境下的C语言编程(三十四)
本文对比分析了单链表和双链表的实现差异及应用场景。在内存占用方面,64位系统中双链表节点比单链表多50%空间(20B vs 12B),百万节点时多消耗7.63MB。操作效率上,双链表删除任意节点均为O(1),而单链表删除非头节点需O(n)。单链表适合内存受限环境(如嵌入式系统)和单向操作场景(栈、队列),双链表则适用于需要双向遍历(浏览器历史)和频繁中间操作的场景(文本编辑器撤销/重做)。设计哲学上,单链表追求极简,双链表强调完备性。
2025-12-05 17:24:40
828
原创 Linux环境下的C语言编程(三十三)
本文详细介绍了C语言中双链表的实现与应用。主要内容包括:双链表的基本结构定义(包含前驱和后继指针)、节点创建方法,以及插入、删除、遍历等核心操作的代码实现与逻辑分析。文章通过购物清单的示例演示了双链表的实际应用,并附有内存可视化说明指针连接方式。最后分析了双链表的优缺点:支持双向遍历、删除高效等优点,但也存在内存占用大、操作复杂等不足。该文可作为学习C语言数据结构的实用参考。
2025-12-05 17:11:52
691
原创 Linux环境下的C语言编程(三十二)
本文对比分析了单链表和循环链表的差异。在结构上,单链表是线性结构,尾节点指向NULL;循环链表是环形结构,尾节点指向头节点形成闭环。核心操作方面,循环链表尾插效率更高(O(1)),但实现更复杂;两者头插和查找时间复杂度相同。内存占用相当,但循环链表指针管理更复杂。单链表实现简单直观,适合大多数线性数据场景;循环链表尾插高效,适合环形数据处理,但容易造成无限循环且边界处理复杂。总体而言,选择链表类型应根据具体应用场景的需求权衡。
2025-11-28 17:18:37
515
原创 Linux环境下的C语言编程(三十一)
本文详细介绍了循环链表的数据结构及其C语言实现。循环链表是一种尾节点指向头节点形成环状的特殊链表,相比单链表具有无限遍历和高效环操作的优势。文章系统讲解了循环链表的基本结构、核心操作(初始化、创建节点、插入/删除/查找节点、遍历、清空等)的实现细节,并提供了完整的示例代码。同时分析了循环链表的优缺点:虽然支持高效的头尾操作,但实现复杂度较高且存在遍历风险。各操作的时间复杂度分析显示,头插尾插为O(1),而位置操作和查找则为O(n)。该实现可作为嵌入式C语言学习的参考范例。
2025-11-28 17:06:56
315
原创 Linux环境下的C语言编程(三十)
本文详细介绍了C语言中单链表的基本概念和操作实现。单链表由包含数据域和指针域的节点组成,通过指针实现动态连接。文章系统讲解了链表的初始化、节点创建、插入(头插、尾插、指定位置)、删除、查找、遍历和清空等核心操作,并提供了完整的代码实现和示意图解。同时分析了单链表的优缺点:动态大小和高效插入删除是主要优势,而随机访问效率低和内存开销大是主要不足。时间复杂度分析显示,除头插操作是O(1)外,大多数操作需要O(n)时间。本文可作为C语言数据结构学习的实用参考。
2025-11-28 16:57:44
403
原创 Linux环境下的C语言编程(二十九)
本文比较了数组和顺序表的区别:数组是基础数据类型,仅提供连续存储空间,而顺序表是基于数组的抽象数据结构,增加了长度管理和操作安全性。关键差异在于:数组长度固定,顺序表区分当前长度和最大容量;数组操作存在越界风险,顺序表通过封装确保安全。应用上,顺序表更适合学生成绩管理等需要动态管理的场景,体现了封装性、抽象性和安全性等软件工程原则。性能方面,两者随机访问均为O(1),但顺序表在插入删除时更便捷。顺序表作为高级抽象,既保留了数组的高效,又提供了更安全易用的接口。
2025-11-28 16:46:45
405
原创 Linux环境下的C语言编程(二十八)
本文作为一个学习C语言学习笔记,记录【史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】-哔哩x课程笔记和自己的困惑之处。请各位大佬指出我的不足之处,更好的促进我的成长。顺序表:在物理内存中用一段地址连续的存储单元,依次存储线性表中的数据元素。注:这种存储方式使得逻辑上相邻的元素在物理位置上也相邻。顺序表 = 数组 + 长度管理操作最好情况最坏情况平均情况例子说明按索引访问O(1)O(1)O(1)一步到位按值查找O(1)O(n)O(n)目标在开头vs目标在末尾。
2025-11-28 16:35:10
581
原创 用GDB调试C语言俄罗斯方块
本文介绍了使用GDB调试俄罗斯方块游戏的基本方法。主要内容包括:1) 编译时添加-g选项生成调试信息;2) 常用GDB命令如设置断点、查看变量等;3) 针对游戏常见问题(如旋转崩溃、碰撞检测异常等)的具体调试方案;4) 高级调试技巧如条件断点、观察点等;5) 针对显示异常、逻辑错误等问题的调试建议。文章提供了详细的命令示例,帮助开发者快速定位和解决游戏开发中的各类问题。
2025-11-21 18:43:42
725
原创 Linux环境下的C语言编程(二十七)
Makefile是用于自动化项目构建的规则文件,通过定义目标、依赖和命令实现增量编译。其核心语法包括变量定义(如CC=gcc)、自动变量($@表示目标)和默认规则(.c到.o的转换)。高级功能包含条件判断、自动依赖生成和递归构建。常见问题包括Tab缩进要求、环境差异和并行构建竞争。Makefile通过精确的依赖管理显著提升大型项目的编译效率,典型应用场景包括C/C++项目构建和自动化测试流程。
2025-11-21 18:19:19
302
原创 Linux环境下的C语言编程(二十六)
typedef是C语言中用于创建类型别名的关键字,主要作用包括:1)为基本数据类型、数组、结构体和函数指针等创建更直观的名称;2)提高代码可读性和可维护性;3)增强程序的可移植性。基本语法为"typedef 原类型 新类型名",常用于简化复杂类型声明、统一类型管理和隐藏平台相关细节。典型应用场景包括定义数据结构别名、简化函数指针声明等,能有效减少重复代码并降低出错概率。
2025-11-21 18:03:44
359
原创 Linux环境下的C语言编程(二十五)
本文详细讲解了C语言中realloc()函数的使用方法。realloc()用于动态调整内存大小,有三种工作方式:原地扩建、搬迁扩建和缩小内存。文章通过水杯类比和购物清单等实例,演示了realloc()的实际应用场景。重点强调了三个关键使用规则:使用临时变量接收结果、检查分配是否成功、正确处理失败情况。最后提供了一个标准化的使用模板,归纳出realloc()的安全使用四步曲:临时指针接收、检查结果、失败处理和成功更新指针。这些内容为C语言动态内存管理提供了实用指导。
2025-11-21 17:49:51
435
原创 Linux环境下的C语言编程(二十四)
本文介绍了C语言中动态内存分配函数calloc的使用方法。calloc函数用于分配指定数量和大小的连续内存空间,并自动初始化为0。文章详细讲解了calloc的基本语法、使用示例(包括学生成绩管理系统实例),重点比较了calloc与malloc的区别(calloc自动清零,malloc不初始化)。同时强调了使用calloc的三个重要规则:检查返回值、用完释放内存、避免重复释放。通过动态数组和字符串数组实例展示了calloc的实际应用,并解答了常见问题。最后总结calloc使用的关键步骤:检查返回值、正确使用和
2025-11-21 17:36:34
445
原创 Linux环境下的C语言编程(二十三)
本文对比了malloc动态内存分配与固定数组的区别,通过图书馆借书的类比形象说明malloc的灵活性。详细介绍了malloc的基本概念、语法规则和使用方法,包括内存分配、类型转换、错误检查及内存释放等关键步骤。通过三个具体示例演示了malloc的常见应用场景,并总结了malloc与固定数组在内存大小、位置和性能等方面的差异。最后强调malloc使用的"申请-检查-释放"三步骤,帮助读者掌握动态内存管理的核心要点。
2025-11-20 20:44:12
265
原创 Linux环境下的C语言编程(二十二)
本文详细介绍了C语言中共用体(union)的特性与应用。共用体是一种特殊数据结构,其成员共享同一内存空间,大小等于最大成员尺寸,同一时间只能有一个成员有效。文章通过代码示例展示了共用体的定义、内存分配特性及基本使用方法,对比了与结构体的区别。重点讲解了共用体在实际开发中的三大应用场景:节省内存空间、类型转换和协议数据处理,并演示了嵌套共用体的用法。最后强调了使用注意事项,包括内存覆盖风险、类型安全跟踪和初始化限制等。合理使用共用体可优化内存并实现灵活数据处理,但需谨慎避免数据损坏。
2025-11-14 17:02:21
418
原创 Gitee使用笔记
本文详细介绍了Gitee(码云)平台的注册、Git工具配置及代码提交的完整流程。内容涵盖:Gitee账号注册的三种方式(手机、邮箱、第三方授权);Git的下载安装与全局配置;SSH密钥生成与绑定;本地项目初始化与远程仓库关联的具体操作步骤;以及推送失败等常见问题的解决方案。通过分步指导帮助开发者快速掌握Gitee平台的基础使用方法,特别适合刚接触代码托管的开发者学习参考。文章强调配置细节,如.gitignore模板选择、README文件创建等最佳实践,并提供问题排查方法,使开发者能够顺利完成从注册到代码提交
2025-11-14 16:41:23
1097
原创 Linux环境下的C语言编程(二十一)
本文详细介绍了C语言中结构体的相关概念和应用。主要内容包括:1)结构体的产生背景和意义,说明其能将不同类型数据组织成逻辑整体;2)结构体类型描述的基本语法和示例;3)结构体的嵌套定义方法;4)结构体变量的定义、初始化和成员引用,涵盖变量定义、数组/指针定义、初始化方式(包括C99指定初始化器)、点运算符和箭头运算符使用等。通过多个具体的代码示例,展示了结构体在实际编程中的应用场景和使用技巧,为C语言学习者提供了结构体使用的全面指导。
2025-11-13 21:08:48
389
原创 俄罗斯方块
本文介绍了一个基于C语言和ncurses库开发的Linux终端俄罗斯方块游戏。项目采用模块化设计,包含游戏逻辑(game.c)、方块处理(block.c)、图形显示(display.c)和主控制(main.c)四个核心模块。实现了方块移动、旋转、碰撞检测、消行等基本功能,使用随机变量生成不同形状的方块。文章还分析了当前版本存在的不足,如碰撞检测不够精确、输入响应延迟以及ncurses库不支持中文等问题。作者总结了开发过程中遇到的困难,认为该项目有助于巩固Linux环境下的C语言编程基础。
2025-11-08 17:00:01
739
原创 Linux环境下的C语言编程(二十)
本文总结了C语言中指针与函数指针的核心概念及应用:1. 指针传参机制(传值与传址的区别),通过swap函数示例展示地址传递如何修改原始数据;2. 指针函数(返回指针的函数)的用法,演示了返回数组元素地址并进行修改;3. 函数指针的定义与调用,包括通过函数指针实现回调函数和命令模式;4. 函数指针数组的应用场景,如构建命令表实现多分支调用。通过典型代码示例(如交换函数、数组操作、计算器实现等)直观展现了指针在内存操作和流程控制中的强大功能。
2025-11-07 16:33:33
446
原创 Linux环境下的C语言编程(十九)
本文总结了C语言中函数与数组交互的关键知识点:1)一维数组传递本质是首元素指针,需额外传递长度;2)二维数组必须指定列数或手动计算索引;3)字符数组通常以'\0'判断结尾,若无需修改建议使用const修饰。通过具体代码示例展示了三种数组类型的函数声明方式和使用方法,特别强调了参数传递时的内存处理机制及注意事项。文中还指出sizeof在函数内获取的是指针大小而非数组大小这一常见误区。
2025-11-07 16:17:09
370
原创 Linux环境下的C语言编程(十八)
本文记录了Linux嵌入式C语言学习中的函数调用详解,主要包括两类调用方式:嵌套调用和递归调用。嵌套调用演示了如何通过函数组合实现复杂功能,如计算极差和学生成绩评级系统;递归调用展示了阶乘和斐波那契数列的实现,重点说明了递归终止条件的重要性。文章还对比了递归与迭代的特性差异,包括代码简洁性、内存使用和执行效率等方面。这些示例展示了C语言函数调用的基本应用场景和实现方法。
2025-11-07 15:58:15
152
原创 Linux环境下的C语言编程(十七)
本文记录了C语言三种参数传递方式的学习笔记:1)值传递-传递参数副本,函数内修改不影响原变量;2)地址传递-通过指针传递变量地址,可修改原变量;3)全局变量-所有函数可访问,但需谨慎使用。通过具体代码示例展示了swapByValue()、swapByAddress()等函数的实现,并分析了不同传递方式的适用场景。建议简单数据用值传递,修改原数据用地址传递,全局共享数据才考虑全局变量。文章旨在通过学习笔记促进C语言理解与进步。
2025-11-07 15:36:29
283
原创 Linux环境下的C语言编程(十六)
本文是Linux嵌入式C语言学习笔记,主要记录函数相关的知识点。内容包括:1)函数定义与声明的基本语法;2)定长参数和变长参数函数的使用;3)函数返回值的应用场景;4)命令行参数的两种处理方法;5)实现简单计算器功能的示例代码。笔记中通过多个代码示例(如Hello World、密码校验、命令行参数解析等)演示了函数的具体应用,并记录了学习过程中的疑问,旨在通过实践加深对C语言函数的理解。
2025-11-07 15:25:15
408
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅