第11章-结构体与共同体.pptVIP

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 结构体与共用体 学习目标 学会建立和使用结构体、共同体。 能够为数据对象动态分配和释放内存。 能够建立和操作链表。 理解链式数据结构的应用。 11.1 引言 数组是一组同类型的数据集合。 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据类型 11.2结构体类型及其变量的定义和初始化 11.2.1 结构体类型定义 11.2.2 结构体变量的定义 先定义结构体类型,再定义结构体变量 一般形式: 定义结构体类型的同时定义结构体变量 一般形式: 11.2.3 结构体变量的引用和初始化 11.2.3 结构体变量的引用和初始化 形式一: 11.3 结构体数组 结构体数组的定义 结构体数组初始化 11.4 结构体指针 指向结构体变量的指针 定义形式:struct 结构体名 *结构体指针名; 例 struct student *p; 用指向结构体的指针作函数参数 用结构体变量的成员作参数----值传递 用指向结构体变量或数组的指针作参数----地址传递 用结构体变量作参数----多值传递,效率低 11.7 链表 1.malloc函数 malloc函数的原型为: void *malloc (unsigned int size) 其作用是在内存的动态存储区(堆)中分配一个长度为size的连续空间。 2.free函数 由于内存空间总是有限的,不可能无限分配下去,而且一个程序应该尽量节约系统资源,因此,用完后应及时释放它,以便其它的变量或者程序能够使用。这时我们就要用到free函数。其函数原型是: void free(void *p) 作用是释放由指针p所指向的内存空间。 静态链表 静态链表的结点不是动态开辟的 动态链表的插入操作 假设在一个单链表中存在2个连续结点p、q(其中p为q的直接前驱),现在需要在p、q之间插入一个新结点s,那么我们必须先为s分配空间并赋值,然后使p的指针域存储s的地址,s的指针域存储q的地址即可。(p-link=s;s-link=q),这样就完成了插入操作。 动态链表的删除操作 假如我们已经知道了要删除的结点p的位置,那么要删除p结点时只要令p结点的前驱结点的指针域由存储p结点的地址改为存储p的后继结点的地址,并释放p结点即可。 11.8 共同体 用户自定义数据类型,也叫联合体 用途: 将不同类型的数据项组织为一个整体,占有同一段内存 共用体类型定义 定义形式: 11.8.2 共用体变量的引用和初始化 1.共同体变量的引用 11.9 用typedef 定义类型 11.10 本章小结 结构体类型 共同体类型 void main() { int number; /*保存人数*/ stud *head; /*head是保存单链表表头结点地址的指针*/ number=N; head=create(number); /*把新建单链表表头地址赋给head指针*/ } 以上为建立包含N个人姓名的单链表。建好一个单链表之后,可进行一些如插入、删除等操作。 下面先介绍查找算法,再来讨论插入和删除操作, stud * search(stud *h,char *x) /*查链表函数,其中h是链表头指针,x指针是要查找人的姓名*/ { stud *p; /*当前指针,指向要与所查找的姓名进行比较的结点*/ char *y; /*保存结点数据域内姓名的指针*/ p=h-link; while(p!=NULL) { y=p-name; if(strcmp(y,x)==0) /*把数据域里的姓名与所要查找的姓名 比较,若相同则返回0,即条件成立*/ return(p); /*返回与所要查找结点的地址*/ else p=p-link; } if(p==NULL) printf(未能查找到该数据!); } void insert(stud *p) /*插入函数,在指针p后插入*/ { char stuname[20]; stud *s; /*指针s是保存新结点地址的*/ if((s= (stud *) malloc(sizeof(stud)))==NULL) { printf(不能分配内存空间!); exit(0); } printf(请

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档