第6讲嵌入式C语言常见数据结构及算法.docx
- 文档编号:3500976
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:528.77KB
第6讲嵌入式C语言常见数据结构及算法.docx
《第6讲嵌入式C语言常见数据结构及算法.docx》由会员分享,可在线阅读,更多相关《第6讲嵌入式C语言常见数据结构及算法.docx(11页珍藏版)》请在冰豆网上搜索。
第6讲嵌入式C语言常见数据结构及算法
GDAIB
EmbeddedCProgramming
嵌入式c语言编程——常见数据结构及算法
DataStructureandArithmetic
Pago2
•结构、联合、枚举
•用结构构成链表
•单向链表
-双向链表
-循环双向链表
•C语言中的常用算法
=15
息有学号.姓名.性别、年龄、住一本图书的「信息鲁分类编号、书名.作者、出版社、出版日期、价格.库存量等。
如何描述这些类型不同的相关数据?
——一种构造类型数据
体由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员。
而数组是了相同类型数据的组合
例如SstructStu
{longxh;/*学号是长搭类型♦/charxm[20];尸姓名是字符数组类型*/floatzf;/*总分是浮点类型♦/intme;};/*名次是妊型类型*/
有3科方床:
1.先定义结构,再体类型定义该种类型的变量structStusi,s2;
structaccountzhang,wang;
定义结构体类型变fi的一般形式struct结构体名结构体变量名表:
Page6
3.直接定义结构体类型变S
(1)结构体变*的定义在函数的数据说明部分进行,也可以在函数的外部定义-但都必须是參照上述3种结构体变量的定义形式,类型定义在前,变量定义在后•
(2)结构体变量一经定义,在程序运行时,系统将按照结构体类型定义时的内存模式为结构体变*分配一定的存储单元•
说明:
结构体类型与结构体变量概念不同变*:
分配内存运算;变量:
可以
结构体变呈a的各成员可分别表示为a.num、
a.name^a.sex^a.score
【例「备构体变量的初始化。
structdate
{intyear,month,day;};
structstudent
{charnum[8hname[20Ksex;
structdatebirthday;
floatscore;
}a={"9606011ming'\*M\{1977,12,9},83},
b={"96()8«25"/*ZhangliminTyF',{1978,5,10},87},£;
如果初值个数少于结构体成员个数,则将无初值对应的成员赋以0值如果初值个数多于结构体成员个数,则编译出错
【例】结构体数组的初始化。
structS
{charnuni[8],nanie[20],sex;
floatscore;
}stul3J={{"96«6()ir',"Liming"/M\87.5},{••96()6»12"/*Zhangjiangguo'*,*M',79},{•*96«6()13"/*Wangping*7F*,9«}};
元素的个数可以省略,根据赋初值时结构体常量的个数确定数组元素的个数
typedefstructaccountchen;
chench1,ch2;
关,但
结构体类型解决了如尸由于共事的特性.
数据类型不同的一组分量只有•新存储的
在需要节省内存储空I期*•效的工供了一种由若干个不同类型的数据项组成,轨存储空间的构造类型。
°
共用体——一种构造类型数据
共用体由若干不同类型的数据项组成,构成共用体的各个数据项称为共用体成员。
1.
共用体类型定义的一般形斗
例如:
unionutype{inti;
charch;longI;charc[4];
Page14
定义了一个unionutype共用体类型,共用体类型定义不分配内存空间,只是说明此类型数据的组成情况.
2.共用体变暑的定X
利用已定义的共用体类型名定义变量变量名表;
例如:
unionutypeul^u2;
按照共用体类型的组成,系统为定义的共用体变量分配内存单元《量所占内存大小等于共用体中占用内存的长.
printfC"%d\n'*iz
of(unionUtypc*));printfX**%d\n”,sizeofXul));
貉'鶴就皐鹫存瞬轉卿
(2)共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原来的成员就失去作用
□1.1=24;
ul.ch='if;
ul・f=12・45:
(3)共用体变量的地址和它的各成员的地址都是用一地址
例如;&111、&iil・i、&ul.ch、&Ulf都是同一地址值。
(4)不能对共用体变量名赋值,不能企图引用变量名来得到一个值,也不能在定义共用体变量时对所有成员进行初始化。
在实际问题中,有些量的取值被限定在一个有限的范围内
个星期内只有七天
—年只有十二个月
嵌入式预科班只有2门课程(C、Linux)一个班最多只能有30个学生
如何为这些量定义类型?
字符型或其它类型显然不妥当
C语言提供了一种称为“枚举”的类型,在“枚举”类型的定
义中“列举出所有可能的取值”,说明该“枚举”类型的变量
取值不能超过定义的范围。
enum枚举名
•「枚举常壬
枚举常量是int型的常量,在使用int类型的任何地址都可以使用
weekis0
weektweek=SUNDAY;
pnntf("weekis%d\n*\week);
printfC*slzeof{week_t)is%d\n*\sizeof(week_t));
O默认值
sizeof(week_t)is2如果是32位的C编译平台,则为4
没有特定指出常量值时,枚举列表中的常量被指定为整数值0、
1、2尊,依次递增
Page20
可以选择常最具有的報数值,后面的常最会被赋予后续的值enuml
CLASSl^ID■0,
CLASS匸XIAOKINGyCLASSl^XIAOTIAN,
二个班学号起纶值
CLiSS2-ID-40,
CLASS2"XIAODONG,
,丿第三个班学号起始值
CLiSS3.ID■£0,
CLJLSS2*XIA0SHUI,
•结构、联合、枚举
•用结构构成链表
•单向链表
-双向链表
-循环双向链表
•C语言中的常用算法
Pag©22
•定义^链表是一种常见的重要数据结构,它可以动态地进行存储分配,根据需要开辟内存单元,还可以方便地实现数据的增加和删除。
•结构:
链表中的每个元素都由两部分组成,即数指针域
•分类;单链表(又分为单向链表和双向链表)
循环链表
-单向链表的每个节点中除信息域以外还有一个指针域,用来
指向其后续节点,其最后一个节点的指针域为空(NULL)
structmylink
inta;structmylink*next;
}*Head,ptr;
IprevIa|next甘prev|a|ne—rev|a|next
NULL
structmylink
inta;
structmylink*next;
structmylink*prev;
}"Head,ptr;
Head
aInexi口prev|a|n—rev|a|next户
structmylink
inta;
structmylinkstructmylink}'Head,ptr;
*next;pev;
-循环链表的组织结构与单链表非常相似,因此其操作与单链表也是一致的,惟一的差别仅在于在单链表中,算法判断到达链表尾的条佯是PTlWXt是否为空,而在双链表中,则是判断p-next是否等于头指针
Page26
结构、联合、枚举用结构构成链表
•单向链表
-双向链表
-循环双向链表
语言中的常用算法
经常采用的算法主要有迭代法、穷举搜索法、递推法、
种类:
贪婪法、回溯法、分治法、动态规划法等等。
另外,在算法设计时又常常采用递归技术,用递归描述算法。
在C语言中接确到的算法有用于排序的冒泡法和选择法,还有用于求n!
的递推法。
选择标准:
通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。
其次是算法所需要的存储空间少和执行更快等。
/冒泡排序法(从小到大)
算法
过程
2222
443③
鳴家
6
5
2
F
4
6[3⑥66
Page28
I
3
J
8
8
8
i逊
\.2
2
2
2
2
5
5
5
5
・♦・■♦
8
4
4
4
4
4
4丿
6
••••0
6
6
6
6
6丿
・J
13
3
3
3
♦・♦・*
3
*•
[⑧
#defineN50
main()
{inti,j,t,x[N];
for(i=0;i scanf&x[i]); for(i=0;i 1: 1 for(j二0;j j++)if(x[j]>x[j+l])严比较相邻两数,小的调到前面*/ {t=x[j]: x[j]=xLj+l];x[j+l]=t;} printf(''thesortednembers: \n"); for(i=0: i printf('、%5d\n",x[i]); Page30 以6个数: 3、7、5、6、8、0为例。 算法: 1: 1 第一趟: 将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。 1: 1 1: 1 第二趟: 将第二个数依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数; 、,【选率法示例】将50个学生成P孕 Page32 /i! =- fl (zi=0,l) n■(«-1)! * (刃>1) 1、直接或者间接调用函数本身叫递归调用,递归为函数嵌套调用过程 2、经典的递归算法实例: 1) ±ntfact(intn)i£(n<= return > eIse n*上act(n—1); < retu匕n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 语言 常见 数据结构 算法