自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式第三十篇——数据结构——哈希表

哈希表是一种通过哈希函数将键映射到存储位置的高效数据结构,支持O(1)时间复杂度的基本操作。其核心包括哈希函数、存储数组和冲突处理机制。哈希函数需具备均匀性、确定性和高效性,常用方法有求余法等。冲突处理主要采用链地址法(冲突键值存储在链表)或开放寻址法(按规则寻找空闲位置)。哈希表广泛应用于字典、缓存系统和数据库索引等场景。使用时需注意哈希函数设计以避免性能退化,开放寻址法的删除操作需要特殊处理。

2025-12-07 23:10:02 432

原创 嵌入式第二十九篇——数据结构——树

本文系统介绍了树结构的基本概念与核心特性。首先定义树是由节点组成的有限集合,阐述了顺序存储和链式存储两种实现方式。重点分析了二叉树的特性,包括斜树、满二叉树和完全二叉树等特殊类型,并给出数学性质公式。详细讲解了四种遍历方法:前序、中序、后序三种深度优先遍历,以及使用队列实现的广度优先层序遍历。全文通过分类阐述和公式表达,全面概括了树结构的关键知识点。

2025-12-07 22:58:09 357

原创 嵌入式第二十八篇——数据结构——队列

摘要:队列是一种先进先出的线性数据结构,可通过顺序表或链表实现。顺序表实现采用循环队列结构,通过头尾指针管理操作,避免空间浪费;链表实现则更灵活,使用头尾指针和节点结构体。两种方式都实现了入队、出队、判空等基本操作,其中顺序表实现需处理队列满/空条件((tail+1)%tlen==head),而链表实现通过动态节点管理数据。队列结构在需要顺序处理的场景中具有重要应用价值。

2025-12-04 23:21:37 536

原创 嵌入式第二十七篇——数据结构——栈

摘要:栈是一种后进先出(LIFO)的线性数据结构,支持入栈(push)、出栈(pop)、查看栈顶(peek)和判空(isEmpty)等基本操作。本文通过C语言实现了基于动态数组的栈结构,包含初始化、内存管理、边界检查等功能。所有操作的时间复杂度均为O(1),并考虑了栈满/空时的错误处理。示例代码演示了创建容量为5的栈,进行入栈、出栈等操作,最后释放内存的完整流程。

2025-12-03 22:27:57 565

原创 嵌入式第二十六篇——数据结构双向链表

摘要:本文介绍了双向链表的基本概念和C语言实现。双向链表的每个节点包含指向前驱和后继节点的指针,支持双向遍历。文章详细说明了节点定义、链表创建方法,以及头部/尾部插入、删除节点等核心操作的具体实现。同时给出了正向和反向遍历链表的代码示例。双向链表相比单向链表具有更高的操作灵活性,适用于需要双向访问的场景。

2025-12-02 22:37:42 569

原创 嵌入式第二十五篇——数据结构单向链表

单向链表是一种动态线性数据结构,由节点(数据域+指针域)组成,通过指针非连续存储。其特点是动态扩展、插入/删除高效(O(1)),但随机访问需遍历(O(n))。核心操作包括:创建空链表,头部/尾部插入节点(需处理边界条件),删除指定节点(需遍历查找),以及遍历输出。优势在于灵活的内存使用和高效增删,劣势是访问效率低和指针内存开销。适用于频繁增删但少查询的场景。

2025-12-01 23:24:37 552

原创 嵌入式第二十四篇——数据结构线性表

摘要:线性表是由相同数据类型元素构成的有限序列,分为顺序存储(顺序表)和链式存储(链表)两种实现方式。顺序表通过连续存储实现随机访问(O(1)),但插入/删除效率低(O(n));链表通过指针连接节点,插入/删除高效(O(1)),但访问需遍历(O(n))。典型操作包括创建、插入、删除、查找等,适用于不同场景:顺序表适合静态数据访问,链表适合动态数据操作。两者在时间复杂度、空间利用率等方面各有优劣。

2025-11-30 23:06:34 695

原创 嵌入式第二十三篇——数据结构基本概念

数据结构是计算机存储和组织数据的方式,包括线性结构(数组、链表、栈、队列)和非线性结构(树、图)。基本操作有插入、删除、查找、遍历和排序。时间复杂度描述算法执行效率,常见类型有O(1)、O(logn)、O(n)、O(nlogn)、O(n²)等,计算时忽略低阶项和常数系数。时间复杂度与空间复杂度不同,前者关注时间增长趋势,后者关注内存需求。常见时间复杂度按效率排序为O(1)最快,O(n!)和O(nⁿ)最慢。

2025-11-30 22:53:59 958

原创 嵌入式第二十二篇——C语言malloc

摘要:malloc是C语言动态分配堆内存的函数,返回未初始化的内存指针。使用时需检查NULL返回值,显式类型转换,并通过free释放内存避免泄漏。关键注意事项包括:分配后初始化内存、避免重复释放、释放后置指针为NULL。典型应用包括分配基本变量、数组及结构体,示例展示了结构体内存的分配与释放流程。

2025-11-26 23:02:11 564

原创 嵌入式第二十一篇——C语言共用体,枚举和位操作

本文介绍了C语言中的共用体(联合体)、枚举和位操作三种特性。共用体允许不同数据类型共享同一内存空间,其大小由最大成员决定,同一时间只能使用一个成员。枚举用于定义常量集合,默认从0开始递增。位操作包括按位与、或、异或等运算,主要用于硬件寄存器操作,可实现特定位的清零、置位等功能。文章详细说明了每种位运算符的功能和典型应用场景,如数据交换、位操作等,并区分了算术右移和逻辑右移的区别。

2025-11-25 18:20:27 583

原创 嵌入式第二十篇——C语言结构体

摘要:结构体是C语言中用户自定义的复合数据类型,用于封装多类型关联数据。其定义方式包括基本定义、定义时声明变量和使用typedef别名。结构体支持顺序初始化和指定成员初始化,可通过直接访问或指针访问成员。内存对齐规则要求成员地址和总体大小都按类型大小对齐。结构体还支持嵌套使用和动态内存分配,适用于组织复杂数据实体。

2025-11-24 20:00:29 345

原创 嵌入式第十九篇——C语言typedef用法

本文介绍了C语言中typedef的四种常见用法:1)为内置类型创建别名,增强语义或简化书写;2)为结构体定义别名,避免重复使用struct关键字;3)为指针类型创建别名,简化指针声明;4)为数组类型定义别名,简化数组声明。每种用法都通过示例代码展示其语法格式和实际应用场景,如typedef int Age、typedef struct{...}Student等。typedef能提高代码可读性,简化复杂类型声明,是C语言中重要的类型定义工具。

2025-11-23 21:45:56 315

原创 嵌入式第十八篇——C语言指针4

本文分析了指针数组与数组指针的区别。指针数组本质是数组,元素为指针(如intp[5]),内存大小为指针大小×数组长度,常用于存储多个字符串。数组指针本质是指针,指向整个数组(如int(p)[5]),内存固定为指针大小,适用于多维数组参数传递。关键区别在于运算符优先级:指针数组[]优先,数组指针()和优先。指针数组变量类型为int**,偏移指向下一个指针;数组指针类型为int()[5],偏移指向下一个同长度数组。

2025-11-23 21:38:12 600

原创 嵌入式第十七篇——C语言指针3

本文介绍了四种指针相关的核心概念:指针函数(返回值是指针的函数)、函数指针(指向函数的指针)、二级指针(指向指针的指针)和const指针(限制修改的指针)。分别阐述了它们的语法格式、核心用途和使用注意事项,包括内存管理、函数回调、指针修改控制等关键点。每种指针类型都配有代码示例,展示了在实际编程中的典型应用场景和正确使用方法。这些指针概念是C语言编程中的重要基础知识,掌握它们对提高编程能力和代码质量具有重要意义。

2025-11-20 18:49:05 526

原创 嵌入式第十六篇——C语言指针2

摘要:本文探讨C语言中指针的核心应用:1)函数参数传递方式,比较值传递与地址传递的区别;2)指针与数组的关系,说明数组名作为指针常量的特性及指针算术运算;3)字符串的指针本质,分析'\0'终止符的作用及标准字符串函数的实现原理。重点阐述了指针在数据传递、数组访问和字符串处理中的关键作用。

2025-11-19 19:22:12 519

原创 嵌入式第十五篇——C语言指针1

本文介绍了C语言指针的核心概念与应用:指针存储变量的内存地址,声明时需匹配数据类型;通过解引用操作可访问或修改目标变量,指针运算遵循类型步长。数组名实为常量指针,指针与数组可互换操作。函数中利用指针参数可跨函数修改变量,返回指针需注意生命周期。此外还详解了二级指针、指针数组与数组指针的区别,并强调安全使用规范:初始化指针、释放后置空及有效性检查。指针作为C语言的核心特性,其正确使用对内存操作和程序效率至关重要。

2025-11-18 20:36:36 475

原创 嵌入式第十四篇——C语言函数递归和宏定义

本文主要介绍了递归函数和宏定义两种编程技术。递归函数通过自身调用来解决问题,包含终止条件和递归步骤两个核心要素,适用于数学序列和树形结构遍历,但可能存在重复计算和栈溢出问题。宏定义是C语言的预处理指令,分为无参宏(常量定义)和带参宏(参数化替换),需注意括号使用和运算符优先级问题。相比函数,带参宏无类型检查但效率更高,适合简单功能;函数更适合处理复杂逻辑。文章通过阶乘计算和最大值比较的代码示例说明了两种技术的具体应用。

2025-11-17 17:40:53 394

原创 嵌入式第十三篇——C语言存储类型和函数参数传递

核心特性:C语言局部变量的默认存储类型(可省略不写),存储在栈内存中,属于“用完即丢”的临时变量。生命周期:仅在所在代码块(如函数、循环体)内有效,代码块执行结束后,栈内存自动释放,变量值消失。作用域:当前代码块(函数内定义则仅函数内可访问)。示例:// 等同于 int a = 10;} // 函数结束,a的栈内存释放,变量失效test();return 0;

2025-11-17 00:41:23 795

原创 嵌入式第十二篇——C语言变量的作用域和生命周期

摘要:本文介绍了C语言中作用域与生命周期的概念。作用域指变量可访问的范围,分为局部、函数原型和文件作用域;生命周期指变量存在时间,包括自动、静态和动态三种类型。关键区别在于作用域是空间概念,生命周期是时间概念。静态局部变量作用域限于函数内但生命周期较长,动态分配变量需手动管理内存。理解这些概念对编写高效可靠的C程序至关重要。

2025-11-15 23:34:37 459

原创 嵌入式第十一篇——C语言函数

本文介绍了C语言函数的基本概念和使用方法。主要内容包括:1)函数定义结构(返回值、函数名、参数、函数体);2)函数调用方式与参数传递(值传递和指针传递);3)函数声明与定义;4)函数分类(按参数和返回值);5)嵌套调用。重点说明了形参与实参的关系,以及通过指针实现地址传递的方法。文章通过示例代码演示了各种函数应用场景,为理解函数编程奠定基础。

2025-11-14 21:38:36 723

原创 嵌入式第十篇——C语言矩形字符数组

本文介绍了C语言中矩形字符数组的定义与使用方法。主要内容包括:1)数组定义格式为char数组名[行数][每行长度],初始化方式分为逐个字符初始化和字符串常量初始化两种;2)访问方式支持单个字符访问和整行字符串访问,可进行单个字符修改或整行替换;3)适用场景如存储固定长度的字符串集合;4)注意事项包括预留足够空间、防止下标越界和正确处理字符串结束符\0。该结构适用于需要存储多行固定长度字符串的应用场景。

2025-11-13 18:55:37 672

原创 嵌入式第九篇——C语言二分查找法和字符数组

摘要:二分查找算法适用于有序数组,通过比较中间值不断缩小查找范围,核心条件为数组必须有序。字符数组在C语言中需注意'\0'终止符,其输入输出及处理函数需规范使用。两者分别展示了高效搜索和字符串处理的基本原理。

2025-11-12 17:26:40 590

原创 嵌入式第八篇——C语言数组与常见排序

本文介绍了数组的基本概念和常见排序算法。数组是具有连续性、单一性和有序性的数据集合,通过下标访问元素,支持全初始化、局部初始化和默认初始化。详细讲解了冒泡排序(相邻元素比较交换)、选择排序(选择最小值交换)和插入排序(元素插入已排序部分)三种经典排序算法的实现过程。使用数组时需注意:数组名表示首地址、不能整体操作、动态数组需内存分配等。合理运用数组特性和排序算法可以有效处理批量数据。

2025-11-11 18:34:21 451

原创 嵌入式第七篇——C语言循环语句

本文介绍了循环结构及其控制语句的使用方法。主要包括三种循环结构:1)for循环,适用于已知循环次数;2)while循环,适用于不确定次数但已知条件;3)do-while循环,适用于至少执行一次的场景。同时阐述了循环控制语句:break用于跳出循环,continue跳过当前循环,goto实现标签跳转。还介绍了循环嵌套的应用场景,如打印乘法表和矩阵。通过示例代码演示了各种循环和控制语句的具体用法,为程序设计中的循环实现提供了基础指导。

2025-11-10 18:28:56 582

原创 嵌入式第六篇——C语言三目运算符和size of()

三目运算符(?:)根据第一个表达式的真假值返回第二个或第三个表达式的结果,是if-else语句的简洁替代。sizeof()运算符用于获取变量、类型或表达式在内存中的字节大小,支持多种使用形式,如sizeof(int)或sizeof(变量)。两者都是C/C++中重要的运算符工具。

2025-11-09 23:30:06 308

原创 嵌入式第五篇——C语言运算符和分支语句

C语言中的关系运算符(==、!=、>、<、>=、<=)用于比较值的大小或相等性,返回1(真)或0(假)。逻辑运算符包括与(&&)、或(||)和非(!)。与运算需两个条件都为真,或运算只需一个条件为真,两者都采用短路求值。非运算对条件取反。这些运算符常用于控制流程和条件判断。

2025-11-07 18:22:32 696

原创 嵌入式第四篇——C语言输入输出函数

功能:按指定格式输出数据格式:printf常用格式占位符:%d:整形无符号(int)%u:整形有符号%o:整形八进制%x:整形十六进制(字母都为小写)%X:整形十六进制(字母都为大写)%c:字符(char)%f:浮点型(float或double),默认为六位小数%n.f:其中n表示保留几位小数%s:字符串%p:指针地址%%:输出百分号本身%e:科学计数法%nd:其中n表示位宽%-nd:其中n表示位宽,负号代表左对齐%#o:八进制加前缀0%#x:十六进制加前缀0x。

2025-11-06 17:17:05 439

原创 嵌入式第三篇——C语言数据类型与运算符

定义:有1个或多个运算符连接的变量,常量的式子(结构)特征:(1)必有返回值;(2)由运算符和操作数组成eg:a*2+b;age>=18;x=5等。

2025-11-05 16:32:56 457

原创 嵌入式第二篇——GCC操作与C语言基础

1.预处理处理代码中的预处理指令,如#include,#define,#ifdef等;2.编译将预处理后的代码(.i文件)转换为汇编语言代码3.汇编将汇编代码(.s文件)转换为机器语言指令(二进制目标代码),生成目标文件(通常以.o或.obj为扩展名)。4.链接将多个目标文件(.o)和所需的库文件(如系统库、静态库、动态库)链接起来,解决符号引用(如函数调用、变量引用),最终生成可执行文件。

2025-11-04 19:12:57 1382

原创 嵌入式第一篇——Linux基础

表示命令行提示符:执行命令的用户:分隔符,无特殊含义: 主机名(网络名),即当前你正在操作的计算机系统名称分隔符代表在用户的家目录 /home/linux: 命令提示符的结尾符号,用于表示当前用户是普通用户(非 root 管理员)。如果是 root 用户,此处会显示为二、Linux操作指令命令固定格式:命令[cmd] 选项[options] 参数[arg]命令手册查询:man[选项]命令名/配置文件名查看ls命令的手册:man ls。

2025-11-03 19:41:58 366

空空如也

空空如也

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

TA关注的人

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