C语言入门讲座 结构(3).pdf

上传人:asd****56 文档编号:79336021 上传时间:2023-03-21 格式:PDF 页数:7 大小:121.61KB
返回 下载 相关 举报
C语言入门讲座 结构(3).pdf_第1页
第1页 / 共7页
C语言入门讲座 结构(3).pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《C语言入门讲座 结构(3).pdf》由会员分享,可在线阅读,更多相关《C语言入门讲座 结构(3).pdf(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C 语言入门讲座 结构(3)学习各种外挂制作技术,马上去百度搜索学习各种外挂制作技术,马上去百度搜索 魔鬼作坊魔鬼作坊 点击第一个站进入、快点击第一个站进入、快速成为做挂达人。速成为做挂达人。结构指针变量作函数参数在 ANSI C 标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传向形参的只是地址,从而减少了时间和空间的开销。例 7.8题目与例 7.4 相同,计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程

2、。struct stuintnum;char*name;char sex;float score;boy5=101,“Li ping”,M,45,102,“Zhang ping”,M,62.5,103,“He fang”,F,92.5,104,“Cheng ling”,F,87,105,“Wang ming”,M,58,;main()struct stu*ps;void ave(structstu*ps);ps=boy;ave(ps);void ave(structstu*ps)intc=0,i;float ave,s=0;for(i=0;iscore;if(ps-scorenum=102;p

3、s-name=“Zhang ping”;ps-sex=M;ps-score=62.5;printf(“Number=%dnName=%sn”,ps-num,ps-name);printf(“Sex=%cnScore=%fn”,ps-sex,ps-score);free(ps);本例中,定义了结构 stu,定义了 stu 类型指针变量 ps.然后分配一块 stu 大内存区,并把首地址赋予 ps,使 ps 指向该区域。再以 ps 为指向结构的指针变量对各成员赋值,并用 printf 输出各成员值。最后用 free 函数释放 ps 指向的内存空间。整个程序包含了申请内存空间、使用内存空间、释放内存空

4、间三个步骤,实现存储空间的动态分配。链表的概念在例 7.9 中采用了动态分配的办法为一个结构分配内存空间。每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点。有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个结点。当然用结构数组也可以完成上述工作,但如果预先不能准确把握学生人数,也就无法确定数组大小。而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。用动态存储的方法可以很好地解决这些问题。有一个学生就分配一个结点,无须预先确定学生的准确人数,某学生退学,可删去该结点,并释放该结点占用的存储空间。从而节约了宝贵的内存资源。另一方面,用数组的方法必须占用一

5、块连续的内存区域。而使用动态分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系可以用指针实现。即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。可在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为 0.这样一种连接方式,在数据结构中称为“链表”.在链表中,第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,

6、姓名 name,性别 sex 和成绩 score等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。例如,一个存放学生学号和成绩的结点应为以下结构:struct stuintnum;intscore;struct stu*next;前两个成员项组成数据域,后一个成员项 next 构成指针域,它是一个指向 stu 类型结构的指针变量。链表的基本操作对链表的主要操作有以下几种:1.建立链表;2.结构的查找与输出;3.插入一个结点;4.删除一个结点;下面通过例题来说明这些操作。例 7.10建立一个三个结点的链表,存放学生数据。为简单起见,我们假定学生数据结构中只有学号和

7、年龄两项。可编写一个建立链表的函数 creat.程序如下:#define NULL 0#define TYPE struct stu#define LEN sizeof(struct stu)struct stuintnum;intage;struct stu*next;TYPE*creat(intn)struct stu*head,*pf,*pb;inti;for(i=0;inum,&pb-age);if(i=0)pf=head=pb;elsepf-next=pb;pb-next=NULL;pf=pb;return(head);在函数外首先用宏定义对三个符号常量作了定义。这里用 TYPE 表

8、示 struct stu,用 LEN表示 sizeof(struct stu)主要的目的是为了在以下程内减少书写并使阅读更加方便。结构 stu定义为外部类型,程序中的各个函数均可使用该定义。creat 函数用于建立一个有 n 个结点的链表,它是一个指针函数,它返回的指针指向 stu 结构。在 creat 函数内定义了三个 stu 结构的指针变量.head 为头指针,pf 为指向两相邻结点的前一结点的指针变量。pb 为后一结点的指针变量。在 for语句内,用 malloc 函数建立长度与 stu 长度相等的空间作为一结点,首地址赋予 pb.然后输入结点数据。如果当前结点为第一结点(i=0),则把 pb 值(该结点指针)赋予 head 和 pf.如非第一结点,则把 pb 值赋予 pf 所指结点的指针域成员 next.而 pb 所指结点为当前的最后结点,其指针域赋 NULL.再把 pb 值赋予 pf 以作下一次循环准备。creat 函数的形参 n,表示所建链表的结点数,作为 for 语句的循环次数。表示了 creat 函数的执行过程。例 7.11写一个函数,在链表中按学号查找该结点。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 成人自考

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com