- 博客(22)
- 收藏
- 关注
原创 嵌入式培训之数据结构学习(六)树(二叉树)、哈希表、内核链表
树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集 T1、T2、…、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。注意(1)n>0时根结点是唯一的,不可能存在多个根结点,别和现实中的大树混在一起,现实中的树有很多根须,那是真实的树,数据结构中的树是只能有一个根结点。(2)m>0 时,子树的个数没有限制,但它们一定是互不相交的。
2025-05-19 19:02:40
891
原创 嵌入式培训之数据结构学习(五)栈与队列
1、栈的定义:注:线性表中的栈在堆区(因为是malloc来的);系统中的栈区存储局部变量、函数形参、函数返回值地址。2、栈顶和栈底:允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。3、:栈又称为后进先出(LastInFirst0ut)的线性表。4、栈示意图:top为栈顶指针5、栈对线性表的插入和删除的位置进行了限制,并没有对元素进出的时间进行限制也就是说,在不是所有元素都进栈的情况下,事先进去的元素也可以出栈,只要保证是。
2025-05-17 14:48:44
1048
原创 嵌入式培训之数据结构学习(三)gdb调试、单向链表练习、顺序表与链表对比
1、gcc -g(调试版本,内含调试信息与源码;2、gdb a.out(调试可执行文件,eg:gdb ./a.out)3、b fun.c:36设置断点,运行到这个位置,程序自动暂停(b :100 默认停在main.c的100行;b fun.c : 36 停在fun.c的36行b 函数名 eg: b InserPosLinkList)4、r运行(出现页面要输入则输入)5、n执行下一步 步过(如果是函数,直接调用结束)s步入自定义函数(系统函数不入)6、使用。
2025-05-14 19:56:41
1052
原创 嵌入式培训之数据结构学习(二)顺序表与单向链表
if (IsFullSeqList(list)) { // 检查是否已满return 1;// 方式1:直接赋值 *data 到当前末尾位置// 方式2:使用memcpy复制数据(适用于结构体中有指针成员的情况,避免浅拷贝)// 元素个数+1return 0;// 成功返回0。
2025-05-13 19:36:57
1717
原创 嵌入式培训之数据结构学习(一)数据结构的基础概念、线性表
1、数据结构:相互之间存在一种或多种特定关系的数据元素的集合。(特定关系有逻辑关系与线性关系)(1)逻辑结构集合,所有数据在同一个集合中,关系平等(数组)线性,数据和数据之间是一对一的关系(数组)树, 一对多图,多对多注:数组属于线性表的一种形式;(2)物理结构(在内存当中的存储关系)顺序存储,数据存放在连续的存储单位中,逻辑关系和物理关系一致;链式存储(链表),数据存放的存储单位是随机或任意的,可以连续也可以不连续 (一般认为不连续)2、数据、 数剧项、数据元素、数据对象。
2025-05-12 19:25:03
929
原创 嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算
形式1:先定义类型,然后定义变量形式2:定义类型的同时定义变量}s;示例:声明结构体的同时定义了两个全局变量(s1,s2)
2025-05-09 23:30:48
868
原创 嵌入式培训之C语言学习(十六)指针(4)指针函数、函数指针、指针的数组、二级指针
1、指针函数:返回值为指针的函数,绝不能返回局部变量的地址(全局变量、静态变量与传进去的指针地址均可返);2、用法:return p;int i = 10;//foo(&i)为i的地址,*foo(&i)为i本身//输出i为100return 0;
2025-05-08 21:09:07
1157
原创 嵌入式培训之C语言学习(十四)指针(2):指针与一维整型数组,快速排序,迭代器,递归
1、指针的强制类型转换2、编写代码检测计算机为小端存储(运行结果为10)还是大端存储(运行结果为0);运行结果为103、符号位扩展:运行结果:FFFF87564、指针的本质是存储的地址,所以在对指针进行算术运算加1时,偏移的字节数取决于指针所指向的数据类型的大小(偏移sizeof(基类型)个字节);注意:一边为指针,一边为整型;地址与地址之间不能求和,但可以求差(如果相减,表示之间相差几个基类型字节,根据正负可以判断谁在前谁在后);必须保证基类型相同。
2025-05-06 23:09:15
472
原创 嵌入式培训之C语言学习(十三)预处理命令与指针(1)
1、形式:#define 标识符 表达内容eg:无脑的文本替换,只换不算(其中PI具有全局作用域注:末尾不加分号否则编译报错(分号也会被无脑替换(语法错误))。2、写宏左右两边尽量加括号避免优先级高低问题;
2025-05-01 00:20:00
1259
原创 嵌入式培训之C语言学习(十二)函数参数(2)与标识符的作用域与可见性
1、形参—二维数组形式+行数(本质就是一堆数组的长度) 实参—数组名+行数2、例题:(1)函数封装打印二维数组;(2)函数封装计算二维数组边框和;(3)二维数组函数封装水平镜像;(4)二维数组水平镜像调用一维数组逆序函数;(5)求二维数组每行的平均值并放入一维数组b[i]中。1、与二维整型数组使用方式相同; 形参—二维数组形式+行数(本质就是一堆数组的长度) 实参—数组名+行数2、例题:(1)函数封装打印二维字符型数组;(2)字符型数组求极大值;(3)逆序输出字符串;(4)选择排序;(5)
2025-04-30 10:30:11
1163
原创 嵌入式培训之C语言学习(十一)函数的递归调用与函数参数
1、直接递归:函数自己调用自己;2、间接递归:在其他函数中调用自己,然后自己再调用其他函数;3、递归是一种特殊的循环(第五种循环)以消耗大量内存空间为代价;4、递归思路:要求问题n,依赖于问题对n-1的解读;5、递归代码实现思路:递推关系;递推结束条件;6、注意事项:为保证栈区不被装满,要找到使循环停下来的条件(栈区空间消耗殆尽(每递归一次要保护现场后要恢复现场)程序崩溃)。7、扩:(笔试题)未定义其他变量不使用三大循环求1~100的和:8、例题:(1)求n的阶乘;
2025-04-28 20:06:14
268
原创 嵌入式培训之C语言学习(十)函数的定义与调用
1、一般形式:类型说明符 函数名(形式参数表列)//函数首部声明部分语句部分}//函数体2、类型说明符(结果类型),可以为所学的任何类型但不能为数组,也可为void(没有要运行返回的结果);函数名符合标识符规则(数字、字母、下划线组成,开头不能为数字,字母区分大小写,不能为关键字);形式参数列表:函数被调用需要提供的额外条件,也可为void型。
2025-04-27 19:51:31
865
原创 嵌入式培训之C语言学习(九)二维数组与二维字符型数组
1、定义形式:类型说明符 数组名[常量表达式1][常量表达式2];常量表达式1为行,常量表达式2为列;2、二维数组:按连续性、有序性、单一性存储在一起的一维数组;为三行四列的二维数组(3*4=12个整型元素)其中数组a只有3个元素(a[0] a[1] a[2]),每个元素为长度为4的一维整型数组;输出结果为48(数组a共占48个字节)4、数组的引用:数组名[下标1][下标2]下标1为元素所处行号,下标2为元素所处列号,行号与列号都是从0开始访问的,超过规定的取值范围会发生越界访问;
2025-04-25 18:22:25
349
原创 嵌入式培训之C语言学习(八)字符型数组及字符串函数
1、字符串的存储具有连续性、有序性和单一性;连续性——数组存放空间是一片连续的内存空间有序性——数组的元素挨个依次存放单一性——数组的元素是同一类型2、字符串数组的定义:char 数组名[元素个数]其中“[]”为类型说明符,仅是说明s为数组,s相当于一个容器,容积要足够大。3、初始化:char s[100] = {"Hello"};其中“{}”也可省略;注未初始化的部分也会被初始化为0;" "也是字符串,叫空字符串。
2025-04-25 09:20:21
632
原创 嵌入式培训之C语言学习(七)数组与排序查找算法
1、定义方式:类型说明符 数组名【常量表达式】;2、一维数组元素的引用表现形式:数组名【下标】,a[i]指数组里具体的值,i为数组下标;数组最前面的为a[0];3、注意事项(1)类型说明符唯独不能是空类型(void);(2)数组名应遵循标识符命名规则;(3)常量表达式为整型常量表达式;(4)“【】”被理解为类型说明符,仅是说明其为数组;
2025-04-23 19:43:08
971
1
原创 嵌入式培训之C语言学习(六)循环控制
1、goto语句为无条件转向语句,一般形式为:goto语句标号;2、用法:与if语句一起构成循环结构;从循环体中跳到循环体外。3、例题:goto语句求1-100的和。
2025-04-22 19:01:07
611
原创 嵌入式培训之C语言学习(五)选择结构程序设计
1、关系运算符及其优先次序如下图所示:2、任何表达式都有数据类型,例:printf(“%lu”,sizeof(4>3));输出结果为4,表示关系表达式为与整型相兼容的类型(int型)。3、C语言逻辑:非零即为真(只有0表示逻辑假),例:i=-3,j=-6;输出结果为0(假),('<'结合方向自左向右),不能用连续方式比较若干表达式。1、3种逻辑运算符(1)&&逻辑与(AND):左右同时为真,表达式结果为真,有一假即为假;(2)||逻辑或(OR):左右有一真即为真,同时为假即为假;
2025-04-21 20:20:50
823
原创 嵌入式培训之C语言学习(四)数据的输入输出
2、函数作用:向终端(或系统隐含指定的输出设备)输出若干个任一类型的数据(putchar只能输出字符,而且只能是一个字符,而printf可以输出多个数据,且为任意类型);2、scanf(“%d%d%d”,&a,&b,&c)该函数的作用是按照a、b、c在内存中的地址将a、b、c的值存进去,(&a,&b,&c必须用,隔开)")输出结果为Hello和W在内存中的地址;1、scanf函数:scanf(格式控制,地址表列),其中地址表列是由若干个地址组成的表列,可以是变量的地址或字符串的首地址;\n",1234);
2025-04-18 20:20:40
627
原创 嵌入式培训之C语言学习(三)转义字符、混合运算、算数运算符
int k = -6;输出t+k 应该为9(t +k 表达式两边数据类型应一致,按照转换规则变量k类型应为unsigned int型,则表达式也应为unsigned int型(无符号整数型))。const关键字:在定义变量i时,前加const修饰,i为只读变量,在程序运行过程中只能初始化不能修改,如:const int i = 100,其与int const i = 100无任何区别。(2)不同运算符要求有不同的运算对象个数,双目运算符需要两个操作数,例:1 + 2 该表达式中1为左操作数,2为右操作数;
2025-04-17 20:14:31
260
原创 嵌入式培训之C语言学习(二)常量、变量及数据类型
unsigned short 占用2字节,取值范围为:0~2^16-1。unsigned long 占用8字节,取值范围为:0~2^64-1。(1)(signed)short 占用2字节,取值范围为:-2^15~2^15-1。signed char占用1字节,取值范围为:-2^7~2^7-1。unsigned char占用1字节,取值范围为:0~2^8-1。(3) long 占用8字节,取值范围为:-2^63~2^63-1。(2) int 占用4字节,取值范围为:-2^31~2^31-1。
2025-04-16 21:22:15
510
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人