版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章结构在这一章中将介绍C语言程序的结构,结构是多个变量的集合,这些变量在内存中连续分布,对外形成一个整体,是数据的一种封装形式,它是对基本数据类型的扩充,是面向对象程序设计的雏形。
9.1结构概述9.2结构变量与指针9.3结构与函数9.4结构与单链表9.1结构概述
9.1.2结构的定义
结构是一种构造类型,它是由若干成员组成的,
每一个成员可以是一个基本数据类型。
结构既是一种构造而成的数据类型,
那么在说明和使用之前必须先定义它,也就是构造它。定义一个结构的一般形式为:struct
结构名称{
成员表列;};成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:
类型说明符
成员名;
结构是其成员变量的总和,在内存中就是几个成员变量连续分布在一起,它们形成一个整体。用定义的结构可以定义结构变量,方法是:struct
结构名称
结构变量名称;通过结构变量可以存取结构的每一个成员,方法是:结构变量.成员变量
structtime{
int
h,m,s;};图9-2time结构与成员变量变量
9.2结构变量与指针
9.2.1结构变量
结构题变量通过一个小数点来连接其成员变量,从而存取其成员变量的值,例如:structtime{int
h,m,s;};structtimet;
在前面结构和变量是分开定义的,实际上在定义结构的同时也可以定义变量,例如:structtime{int
h,m,s;}t1,t2;则在定义time结构的同时定义了t1与t2两个变量。9.2.2结构变量指针
结构变量也可以取其地址,得到结构变量的指针,例如:structtime{int
h,m,s;};structtime*p,t;int
h,m,s;p=&t;
结构指针通过“->”的符号来连接成员变量,从而存取成员变量的值,例如:p->h=1;p->m=2;p->s=3;//对成员变量赋值h=p->h;m=p->m;s=p->s;//取成员变量的值注意“->”是一个减号与一个箭头的组合,虽然是两个符号,但应该看成是一个不可分割的符号,用它来连接结构变量的指针与成员变量。9.2.3结构变量初始化
在定义变量或数组时可以初始化,在定义结构变量时也可以初始化结构变量,例如:structtime{int
h,m,s;};structtimet={1,2,3};
则在定义了变量t的时候对它进行初始化赋值,既t.h=1、t.m=2、t.s=3。就像数组的初始化一样,在初始化赋值时可以为每个成员提供初始值,这样每个成员都有一个对应的初始值;也可以只为前面部分成员提供初始值,这时后面没有提供初始值的成员就自动为0,例如:structtimeta={1,2,3},tb={12};//结果ta.h=1,ta.m=2,ta.s=3,tb.h=12,tb.m=0,tb.s=09.2.4结构与数组
结构是一种构造类型,它就像普通数据类型一样,可以用结构类型来定义数组,数组的元素可以是结构类型的,因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。
在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体,例如:structtimetimes[3];则times是一个数组,有times[0]、times[1]、times[2]三个元素,每个元素都是一个structtime的变量,可以用times数组来表示三个不同的时间。9.2.5结构的结构
结构的成员变量一般是基本数据类型,其实也可以是一个已经定义过的结构类型,例如定义日期类型date如下:structdate{int
y,m,d;};其中y、m、d分别表示年、月、日。如果要表示一个时刻,则应该是日期date与时间time的组合,这种应用非常多,例如在计算机中一个文件的创建日期就是这样的。可以设计一个日期时间结构,例如:struct
datetime{int
year,month,day;int
hour,minute,second;};
year、month、day是年、月、日,hour、minute、second是时、分、秒。但是在已经定义了日期结构date及时间结构time之后,就没有必要再这样定义datetime结构,一种比较好的方法是:
struct
datetime{
structdated;
structtimet;};这样定义的日期时间结构条理更清晰,datetime结构中包含了2个变量,其中d变量是一个date结构变量,t变量是一个time结构变量,用datetime定义变量:struct
datetime
dt;
则dt.d是一个structdate变量,(dt.d).y是年份,可以直接写成dt.d.y,dt.d.m是月份,dt.d.d是日期。同样dt.t.h、dt.t.m、dt.t.s分别是时、分、秒。这种结构中包含结构的方法称为结构的嵌套,在实际中有广泛的使用价值。
9.3结构与函数
9.3.1结构作为函数参数
结构变量与普通变量一样,也可以作为函数的参数,在例9_1中曾经用时间结构time作为参数来实现IsValid函数:int
IsValid(structtimet);
其中的t是函数isValid的局部变量,在调用这个函数时,实际参数也是一个time结构的变量,它把值传递给这个函数的t变量,既同时传递了structtime结构中的h、m、s共3个整数变量,12个字节。一般如果结构的成员比较多,占的空间较大,传递的字节数就多,传递执行效率相应也下降。为了提高传递效率,结构变量建议通过指针来传递,因为指针在32位系统中也就是4个字节,传递是只传递4个字节的指针,速度会快些,但要注意传递指针时,在函数内部对结构变量的修改会影响到主函数中实参的结构变量的值。9.4结构与单链表
9.4.1包含结构指针的结构
一个结构中的成员变量可以是各种基本的数据类型,可以是另外一个结构,也可以是数组,还可以是它自己的指针,例如:structnode{intvalue;structnode*next;};其中node是一个结构,value是一个数据成员,next是一个structnode的指针成员,在C语言中允许在一个结构中定义自己的结构指针。但要注意不能在结构中定义自己的结构变量,例如下面是错误的:struct
wrong_node{intvalue;struct
wrong_nodex;};想象有一组structnode变量,在structnode中的next指针指向另外一个structnode变量,而每个structnode变量都指向下一个structnode变量,设置最后一个变量的next值为空,既NULL,这样一组structnode变量就形成了一个链表,如图9-7所示,由于这个链表中只有一个指针域next,所以也称单链表。在链表中有一个头结点民用一个structnode的指针变量head指向这个结点,只要知道这个结点,就可以访问到链表中所有结点。
图9-7单链表9.4.3单链表的操作
1.
查找操作在一个链表中查找是否有一个值为value的结点,如有则返回对应的结点,没有则返回空指针,查找可以采用顺序扫描的方法。
2.
插入操作如果链表的结点是按从小到大排列的,则插入一个值为value的结点可以先到链表中去找到value的前一个结点p,既p->value<value,同时设置q=p->next是p的下一个结点,value<q->value,这样就把新结点插在p与q之间,设新结点是r,既r->value=value,则下面的操作可以很方便完成插入:p->next=r;r->next=q;如图9-10所示画出了插入前后的链表变化。图9-10在p与q之间插入r3.
删除操作在链表中删除一个结点是value值的结点时,可以先找到这个结点r,设r的前一个结点是p,后一个结点是q,则:p->next=q;free(r);就可以删除结点,如图9-11所示画出了这一操作过程。
图9-11在p与q之间删除r单链表中各个结点的内存分布一般不是连续的,它
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鼻咽癌的治疗进展与康复指南
- 2026四川新火炬化工有限责任公司招聘13人备考题库及参考答案详解【综合题】
- 2026长春光机所春季招聘334人备考题库含答案详解【研优卷】
- 2026天津市渤海国资人力资源开发服务有限公司招聘项目制工作人员1人备考题库a4版附答案详解
- 耳鼻喉科鼻炎预防指南
- 2026浙江宁波市余姚市自然资源和规划局招聘编外人员1人备考题库完整版附答案详解
- 2026广东深圳市龙岗区坂田街道御珑豪园幼儿园招聘1人备考题库带答案详解(能力提升)
- 2026浙江宁波市公安局海曙区分局招聘警务辅助人员78人备考题库及答案详解(夺冠系列)
- 2026河北邯郸市中西医结合医院选聘22人备考题库及答案详解(历年真题)
- 2026甘肃天水市张家川县县直事业单位选调33人备考题库及答案详解(全优)
- 【新高教版中职数学基础模块下册PPT】7.2旋转体
- 绝对最大弯矩公式
- 维克多高中英语3500词汇
- 水稻幼穗发育
- 疗养院新康复大楼lte室内分布测试报告
- 全国优质课一等奖小学四年级道德与法治下册《学会合理消费》(精品课件)
- 核磁共振上册氢谱
- 皮肤科常见疾病康复
- 输气管道毕业论文输气管道工程初步设计
- 第3章物流类型
- 烹饪化学教程课件
评论
0/150
提交评论