自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux应用编程---进程

简单来说,进程是正在进行中的程序,是程序的一次执行过程,也是程序的执行实例。我们编写的 C 语言源程序(如 0.c)经过编译链接后会生成可执行文件(如 a.out),这个可执行文件只是存储在硬盘上的静态程序,当它被加载到内存中运行时,就成为了动态进程。// 自定义环境变量数组// 执行env命令,传入自定义环境变量进程定义:正在运行的程序,是程序的一次执行过程,动态的内存实体;进程组成:PCB(进程控制块)+ 内存段(text|data|bss | 堆 | 栈),PCB 是进程的核心管理结构;

2026-03-24 19:12:47 396

原创 文件 IO、目录操作与文件属性

系统调用 IOopenclosereadwritelseek,直接操作文件描述符,无缓冲区。文件权限:由决定,用rwxrwxrwx表示。目录操作opendirreaddirclosedir,遍历目录并处理文件类型。文件属性stat函数获取文件详细信息,解析st_mode得到类型和权限。流与 fd 转换fdopen和fileno实现标准 IO 与系统 IO 的互通。

2026-03-24 10:41:55 305

原创 Linux 系统编程入门:从文件 IO 到标准库,一篇就够

在 Linux 系统上,调用系统提供的函数,实现想要的功能。比如:写一个音乐播放器,需要从网络下载歌曲(网络编程)、保存到本地(文件编程)、多线程播放(多任务编程)。Linux 下一切皆文件,设备、管道、Socket 都被抽象成文件,用统一的文件接口操作。Linux 一切皆文件:7 种文件类型,统一操作接口。文件操作流程:打开 → 读 / 写 → 关闭。标准 IOfopenfclosefreadfwrite,自带缓冲区,易用高效。系统 IOopenclosereadwrite。

2026-03-23 21:03:01 319

原创 数据结构---哈希表

当两个不同的关键字,通过同一个哈希函数计算出相同的哈希地址时,就发生了哈希冲突(也叫碰撞)。本质原因:哈希函数的输入空间(关键字集合)远大于输出空间(数组下标集合),根据鸽巢原理,冲突不可避免,我们只能想办法「处理冲突」。// 数据类型别名(可根据需求修改为int、char*等)// 链表节点结构// 数据域// 指针域,指向下一个冲突节点} node_t;// 哈希表大小(可根据需求调整,通常取质数)// 哈希表:数组,每个元素是链表头指针。

2026-03-23 20:56:28 344

原创 树与二叉树

二叉树是每个节点最多有两个子树的树结构,两个子树分别称为左子树和右子树,有严格的顺序之分。// 数据类型别名// 二叉树节点结构// 数据域// 左子树指针// 右子树指针} btree_t;二叉树定义:每个节点最多两个子树,有严格左右顺序;特殊形态:满二叉树、完全二叉树,掌握它们的性质;核心性质、深度计算、每层最大节点数;四种遍历:前序(根左右)、中序(左根右)、后序(左右根)、层序(队列);代码实现:递归创建、递归遍历、层序遍历、销毁。

2026-03-21 09:31:11 356

原创 双向链表:从结构到增删改查

核心抓住指针操作:双向链表的关键是prev和next的链接,插入 / 删除时一定要画图理解指针变化;边界情况要注意头插 / 尾插时,空链表和非空链表的处理逻辑不同;删除尾节点时,next为NULL,无需处理后继节点的prev;实践建议先手写插入 / 删除的步骤(画指针流向),再敲代码;测试边界情况:空链表、单节点链表、首尾节点操作;结合 LeetCode 刷题,比如「回文链表」「链表排序」等题目,双向链表能简化实现。

2026-03-20 20:09:54 242

原创 数据结构进阶:栈与队列

核心抓住原则:栈记LIFO,队列记FIFO。实现重点顺序栈重点是top下标的变化(-1 为初始)。循环队列重点是取模运算和判空判满条件。链栈 / 链队列重点是指针的连接(头插 / 尾插)。实践建议先手写顺序栈和循环队列的操作步骤(画图理解)。动手敲代码,测试边界情况(空栈 / 满栈、空队列)。结合 LeetCode 刷题,用栈解决括号匹配、逆序问题,用队列解决 BFS 问题。

2026-03-20 19:48:34 354

原创 数据结构基础

数据结构:逻辑结构(集合 / 线性 / 树 / 图)+ 物理结构(顺序 / 链式 / 索引 / 散列)+ 算法;链表:由节点组成,核心操作是增删改查,适合频繁插入 / 删除场景;经典算法:插入排序、选择排序、环检测、找倒数第 k 个节点等;技巧:多画图理解指针变化,优先考虑快慢指针法解决链表问题。

2026-03-19 20:46:33 365

原创 单向链表的排序

插入排序:将无序区元素逐个插入有序区,数组版靠「后移元素」,链表版靠「指针插入」;链表插入排序:关键是「拆分链表」和「找到前驱节点」,是面试高频考点;选择排序:为每个位置选最小数,链表实现可通过「交换数据」简化指针操作;时间复杂度:两种排序均为 O (n²),适合小规模数据。

2026-03-19 10:00:17 420

原创 数据结构单向链表

数据项:最小不可分割的数据单位(比如学生的「姓名」「学号」);数据元素:由多个数据项组成的完整实体(比如一个「学生」对象);数据结构:研究数据元素之间的关系,以及如何高效存储和操作这些数据。数据结构 = 数据的存储结构 + 数据之间的逻辑关系 + 操作数据的算法。算法是解决问题的步骤,和数据结构强绑定 —— 不同的存储结构,对应的操作算法完全不同。输入 / 输出:有明确的输入数据和输出结果;有穷性:步骤有限,不会无限循环;确定性:每一步都有明确含义,无歧义;可行性:能在计算机上实际执行。

2026-03-18 19:46:48 337

原创 菜鸟的嵌入式进阶之路——指针

本文系统介绍了C语言指针的核心概念与应用。指针本质是内存地址,指针变量存储地址值,通过取地址(&)和解引用()操作访问数据。指针主要用于:1)函数间修改数据(地址传递);2)高效操作数组/字符串;3)动态内存管理(malloc/free);4)实现回调函数(函数指针)。关键点包括:指针类型决定访问方式、避免野指针、const保护数据、堆内存及时释放。理解指针与数组的等价关系(如a[i]≡(a+i))和二维数组的指针操作是进阶重点。指针是C语言的核心特性,需通过实践逐步掌握其灵活性和高效性。

2026-03-18 17:00:58 331

原创 菜鸟的嵌入式进阶之路——函数

写在main前:兼具定义和声明作用,可直接调用;写在main后:需在调用前声明(复制函数头加;#define函数遵循「功能单一原则」,参数传递为值传递,数组参数本质传地址;递归需满足「递推关系 + 结束条件」,适用于可拆解的重复性问题。

2026-03-07 15:43:22 400

原创 菜鸟的嵌入式进阶之路——二维数组

二维数组的核心是处理「表格 / 矩阵」类行列关系数据(比如 “3 组数据,每组 4 个值”),其本质是一维数组的一维数组// 等价于 int[4] a[3];// 即:存放3个「int[4]类型一维数组」的一维数组内存特性:内存是线性空间,二维数组按行优先存储(先存第一行,再存第二行);占用3*4*sizeof(int) = 48字节(int 占 4 字节);数组通用特性:连续性、单一性、有序性。某位置元素是「该行最大值 + 该列最小值」,二维数组可能无鞍点。

2026-02-19 11:36:56 626

原创 嵌入式菜鸟的进阶之路——排序与查找

冒泡、选择、插入排序的最坏时间复杂度均为 O (n²),属于基础排序算法,适合小规模数据排序;三大算法核心思想各有侧重:冒泡靠相邻交换、选择靠选值交换、插入靠插入有序区;排序的核心价值是为高效查找(如二分查找)提供基础,是编程必备的核心基础。

2026-02-19 11:30:29 601

原创 菜鸟的嵌入式进阶之路——循环,数组

类型 数组名[常量表达式];int a[10];// 10个intfloat b[5];// 5个floatchar c[20];// 20个char。

2026-01-14 20:50:31 463

原创 菜鸟的嵌入式进阶之路——流程控制

用于判断 “多个条件是否同时 / 任意满足”,嵌入式中常用于 “复合条件检测”(如 “温度 > 30℃ 且 湿度 > 60%”)。构造判断条件,结果用 “真(1)” 和 “假(0)” 表示(无专门布尔类型,用 int 替代)。

2026-01-13 20:18:39 866

原创 嵌入式菜鸟的进阶之路——C的输入输出

语句是完成特定操作的代码单元,以分号结尾。二、输入与输出。

2026-01-12 19:55:56 687

原创 菜鸟的嵌入式进阶之路——C语言

/ 合法定义int a;// 基本整型int a_1;// 字母+数字+下划线short b;// 短整型long c;// 长整型// 长长整型// 非法定义int 1_a;// 数字开头(错误)int short;// 与关键字重名(错误)// 小写转大写c1 -= 32;c2 -= 32;c3 -= 32;c4 -= 32;c5 -= 32;printf("转换结果:%c%c%c%c%c\n", c1, c2, c3, c4, c5);// 输出HELLO。

2026-01-09 20:01:29 923

原创 菜鸟的嵌入式进阶之路——初识Ubuntu

Linux 终端命令是嵌入式开发的基础,核心命令(pwd/ls/cd/touch/mkdir/cp/mv/rm)需熟练掌握;路径分为绝对路径(从 / 根目录开始)和相对路径(从当前目录开始),..代表上一级目录,代表家目录;操作目录时,cp/rm 命令必须加-r选项实现递归操作,否则会报错;实操是掌握 Linux 命令的关键,建议多做练习,熟悉每个命令的不同参数和场景。

2026-01-08 20:34:45 320

空空如也

空空如也

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

TA关注的人

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