- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.2 结构体 9.2.1 结构体的概念 前面各章介绍了C语言的基本数据类型:如int、char、float、double、long等,它们都是简单数据类型。我们还学习了一种构造数据类型:数组。数组是由相同类型的元素组成的。可是我们经常会遇到这种情况,几个不同类型的数据之间存在着密切联系,它们用来描述一个事物的几个方面。例如,我们用工作证号、姓名、性别、年龄、工资、家庭住址等数据项来描述某个职工的情况。某职工的情况如表9-6所示。 9.3 链表 通过前面对数组的学习,我们知道用数组来存放数据时,必须事先定义数组的长度,而且数组长度一旦定义就不能更改,这样不但浪费了大量的内存空间,而且也使我们处理数据很不方便。能不能引入一种数据结构,使它能根据需要来动态地分配内存单元呢?这种新的数据结构就是链表。 9.3.1 链表的概述 链表是由一系列结点组成的,每个结点又由两部分构成:一部分为数据域(data),用来保存用户需要用到的数据,它可以由多个数据项构成;另一部分为地址域(next),它是指向下一个结点的地址指针,用来保存下一结点的地址。最后一个结点没有后继,其指针必须为空,表示该链到此结束。 此外链表还包括指向第一个结点的“头指针”和指向尾结点的“尾指针”。“头指针”(head)可以帮助我们找到该链表,“头指针”用来保存第一个结点的地址。“尾指针”指向尾结点的地址域。 9.4 联合 有时候需要使不同类型的变量存放到同一地址开始的内存单元中去,例如把一个整型变量,一个字符变量,一个实型变量放到同一地址开始的内存单元中。以上三种变量在内存中占用的字节数不同,但都从同一地址开始,也就是使用覆盖技术,几个变量相互覆盖。这种使几种不同的变量共同占用同一段内存的结构称为联合,有的书上称为共用体。 联合的一般定义形式如下: union 联合名 { 成员表列 }; 我们把链表中的结点定义成一结构体类型。 【例9.15】定义一个简单的链表,每个结点有两个成员,数据域为一个int型的整数,指针域next指向下一个同类型的结点。 struct list { int num; struct list ?next; }; 下面我们介绍Turbo C中与链表有关的两个函数: (1)malloc(size)在内存中申请分配一个长度为size的连续空间,如果申请成功,此函数的返回值为指向该分配域起始位置的指针;如果申请不成功,则函数的返回值为0(null),即返回空指针。 (2)ifree(ptr)释放由ptr指向的内存区,ptr为最近一次调用malloc()函数的返回值。 对于链表我们可以进行多种操作,常用的有: ? 建立一个链表; ? 输出链表中的数据; ? 往链表中插入一个结点; ? 从链表中删除一个结点; 我们下面将对上述操作进行详细介绍。 9.3.2 链表操作 1.建立一个链表 所谓建立一个链表,就是从无到有地创建头结点、中间诸结点和尾结点,并使各个结点通过结点的地址域连接成一个有机的“链”。 建立一个的链表的步骤如下: (1)我们先定义三个指针变量head、p、q,它们都指向结构体类型的数据。 (2)用malloc(size)函数开辟一个空间,生成一个新结点,并使p、q指向它。 (3)初始化head为空。 (4)从键盘输入一个数据给p指向的结点。 (5)把p的值赋给head,使head指向新结点 (6)用malloc(size)函数开辟一个空间,生成下一个结点,使p指向它并给它的数据域赋值。 (7)将p的值赋值给q指向结点的地址域变量,即q-next = p,使q的指针域保存新结点的地址。 (8)将p的值赋值给q,实现指针下移,为下一次连接做准备。 (9)循环执行(6)、(7)、(8)直到最后一个结点连接完毕,并把它的指针域赋值为空。 【例9.16】根据以上讨论,编一个建立新链表的程序。 #define NULL 0 #define LEN sizeof(struct list) struct list { long num; struct list ?next; }; int n; struct list ?creat() { struct list ?head; struct list ? p, ?q; n = 0; p = q = (struct list ?)malloc(LEN); scanf(%ld, p-num); head = NULL; while(p-num! = 0) {n
您可能关注的文档
- 【六年级英语】小学六年级英语话题复习ppt模版课件.ppt
- 人教版语文第五单元第十七课《李杜诗五首》.ppt
- 中职可视化编程应用-Visual Basic(主编刘琨、同斌 北理工版)课件:模块2 VB程序设计语言基础01.ppt
- 2015金属融化焊基础(机工版)课件:合金的结构与结晶.ppt
- 【二年级语文】揠苗助长ppt模版课件.ppt
- 【高三数学】感恩父母ppt模版课件.ppt
- 【广告传媒】3视听听觉构成ppt模版课件.ppt
- 【高一语文】荷花淀ppt模版课件.ppt
- unit 9《people》lesson33《what does he look like》课件1(21张ppt)(北师大版七年级下).ppt
- 八年级语文奇妙的克隆课件一.ppt
- 物流管理基础(主编华细玲等 北理工版)课件:情景9 电子商务与物流03.ppt
- 【高考语文】扩展语句、压缩语段ppt模版课件.ppt
- 【二年级其他课程】森林小卫士-ppt模版课件.ppt
- 【广告传媒】Brown & Hobbs品牌vi设计ppt模版课件.ppt
- 【高考语文】图文转换解题指导2012ppt模版课件.ppt
- 【备课精选】2012初中七年级下册英语牛津译林版课件unit1 dream homes 课件(牛津英语七年级下).ppt
- 【高三理化生】生物变异在生产上的应用春晖公开课)ppt模版课件.ppt
- 【广告传媒】效果分析ppt模版课件.ppt
- 【广告传媒】POP广告ppt模版课件1.ppt
- 2013初中七年级数学基础巩固课件:2.6《有理数加减法的混合运算》.ppt
最近下载
- 保险学结课论文.docx VIP
- 2025四川广安安辑项目管理有限公司第二批次招聘劳动合同工5人笔试参考题库附答案解析.docx VIP
- 呆呆鲨可爱卡通风AI应用科普模版.pptx VIP
- 中考数学复习重难题型真题再现及题型预测(全国通用)专题01简单计算题(实数混合计算、整式分式化简、解分式方程、解不等式及方程)(原卷版+解析).docx VIP
- 实验室废物处理培训.pptx VIP
- 2025四川广安安辑项目管理有限公司第二批次招聘劳动合同工5人笔试备考题库及答案解析.docx VIP
- 劳力士培训课件.ppt VIP
- 医学大数据分析与挖掘方法及应用研究综述.pptx VIP
- 第一视角与第三视角.ppt VIP
- 窗口人员劳务派遣投标方案模板(345).doc VIP
原创力文档


文档评论(0)