第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx

上传人:b****4 文档编号:16406369 上传时间:2022-11-23 格式:DOCX 页数:11 大小:528.77KB
下载 相关 举报
第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx_第1页
第1页 / 共11页
第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx_第2页
第2页 / 共11页
第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx_第3页
第3页 / 共11页
第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx_第4页
第4页 / 共11页
第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx

《第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。

第6讲嵌入式C语言常见数据结构及算法Word格式文档下载.docx

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;

}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,

Pag©

22

•定义^链表是一种常见的重要数据结构,它可以动态地进行存储分配,根据需要开辟内存单元,还可以方便地实现数据的增加和删除。

•结构:

链表中的每个元素都由两部分组成,即数指针域

•分类;

单链表(又分为单向链表和双向链表)

循环链表

-单向链表的每个节点中除信息域以外还有一个指针域,用来

指向其后续节点,其最后一个节点的指针域为空(NULL)

structmylink

inta;

structmylink*next;

}*Head,ptr;

IprevIa|next甘prev|a|ne—rev|a|next

NULL

structmylink*next;

structmylink*prev;

}"

Head,ptr;

Head

aInexi口prev|a|n—rev|a|next户

structmylinkstructmylink}'

*next;

pev;

-循环链表的组织结构与单链表非常相似,因此其操作与单链表也是一致的,惟一的差别仅在于在单链表中,算法判断到达链表尾的条佯是PTlWXt是否为空,而在双链表中,则是判断p-next是否等于头指针

Page26

结构、联合、枚举用结构构成链表

语言中的常用算法

经常采用的算法主要有迭代法、穷举搜索法、递推法、

种类:

贪婪法、回溯法、分治法、动态规划法等等。

另外,在算法设计时又常常采用递归技术,用递归描述算法。

在C语言中接确到的算法有用于排序的冒泡法和选择法,还有用于求n!

的递推法。

选择标准:

通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。

其次是算法所需要的存储空间少和执行更快等。

/冒泡排序法(从小到大)

算法

过程

2222

443③

鳴家

6

5

2

F

4

6[3⑥66

Page28

I

3

J

8

i逊

\.2

・♦・■♦

4丿

••••0

6丿

・J

13

♦・♦・*

*•

[⑧

#defineN50

main()

{inti,j,t,x[N];

for(i=0;

i<

N;

i++)

scanf&

x[i]);

N-l;

1:

1

for(j二0;

j<

N-l-i:

j++)if(x[j]>

x[j+l])严比较相邻两数,小的调到前面*/

{t=x[j]:

x[j]=xLj+l];

x[j+l]=t;

}

printf('

'

thesortednembers:

\n"

);

for(i=0:

、%5d\n"

x[i]);

Page30

以6个数:

3、7、5、6、8、0为例。

算法:

第一趟:

将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。

第二趟:

将第二个数依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数;

、,【选率法示例】将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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1