- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第十二章动态数据结构管理动态变量动态数据结构栈──stack队列──queue链表——linkagetable树——tree图——graph程序设计实例本章小结 作业
考虑上一章的职工卡片问题,用计算机管理这些卡片,要把卡片保存在计算机内。首先,用什么数据结构存储:一张卡片是一个结构体,所有卡片自然用结构体数组。第三,操作问题:若增加一个人,应该在数组中加一个元素,会产生数组不够大的可能。若增加一张卡片在数组中间,应该把加入位置以后的其它元素依次向后移动。若在中间删除一张卡片,会在数组中间留下一个“洞”,应该把“洞”以后的元素依次向前移动
0102使用数组带来的问题是:需要多大存储量(有多少张卡片)就用多大。中间加一张卡片时不要向后串别的卡片,删除一张卡片时不要留下“洞”。操作不方便;数组尺寸不好确定。第二,数组多大:为保存全部卡片,并且人数不固定,就应该给一个足够大的数组。最好把这些卡片存储成动态的,
如图的链式结构可以满足要求:当增加一张卡片时,只需要向计算机系统申请一块空间,联到链的适当位置上。例如,要增加一张卡片50插入到2、3之间,则只需要如下修改指针:若删除一节,只需要将其从链上摘下来即可。例删除2节得 链上已经没有2节了,删掉的节所占的存储空间还可以还回计算机系统,以便作其它用途。123…n.50
这就是一种动态数据结构中的——链表。动态数据结构上的一项是一个动态变量,指针是标识动态变量的有力手段。动态变量与静态变量的区别在于:1静态变量是程序中由程序员“显式”说明的变量。它有一个名字,在编译时,编译程序已经给它分配存储空间。这块存储空间用变量的名字来标识。2
动态变量在程序中没有“显式”说明,它没有名字在编译时编译程序不知道有该变量,不给(也不可能给)它分配空间。动态变量是在程序运行时随程序存储数据的需要,申请空间函数(例如malloc,当然也是由程序员安排的)随机的动态的申请来的空间。它没有名字,一般动态变量都由指针标识。当使用完毕后,由释放空间函数(例如free)释放,还回计算机存储管理系统,以备它用。
注意:这里所说的静态变量不是C语言中由静态存储类别static声明的变量;动态变量也不是C语言中由自动存储类别auto声明的变量。而是一般程序设计概念中的静态变量、动态变量
动态变量在程序运行时,随程序存储数据的需要,向计算机系统申请;使用完后还回计算机系统。本节介绍申请计算机存储空间函数malloc释放存储空间函数free管理动态变量
目标代码空间静态区空间库代码空间堆区空间栈区空间内存程序运行时,涉及用户程序的内存存储结构如右图所示,首先是目标代码区;然后是静态存储区,用于存放那些可用绝对地址标识的,主要是具有静态存储类别的数据和变量;接着是目标代码运行时用到的库程序代码区;最后剩余空间是栈区和堆区,栈区和堆区从剩余空间的两端,动态的向中间增长。栈区用来存储程序中声明的函数的局部变量等具有自动存储类别的数据和变量;堆区用来存储经过动态申请空间函数申请的变量。
sizeof运算符单目运算符sizeof的操作数是类型。运算结果是求得相应类型的尺寸,即存储相应类型数据所需要的字节数。sizeof(int)/*结果是2*/sizeof(char)/*结果是1*/sizeof(structdate)/*若structdate是第十一章定义的日期类型,结果是6*/
malloc函数:原型void*malloc(unsignedlongsize);功能申请足够大内存区域用来存储长度为size的数据对象,返回该区域的首指针,并保证该区域符合任何数据类型对存储区域开始地址和对齐的要求。返回指针是void类型的,调用者必须使用显示强制类型转换,把该指针转换成所需要类型的指针。
float*p;p=(float*)malloc(sizeof(float));structdate*pdate;pdate=(structdate*)malloc(sizeof(structdate)):
01动态申请的内存如果不再使用,应当适时释放这样可以提高程序运行效率。free函数用来释放经过malloc申请的动态空间。free的函数02原型03voidfree(void*ptr);04功能05释放由malloc申请的内存区域。free的参数ptr是一个指针,指向以前由malloc申请的一个内存区域。free函数
例申请 float*p; p=(float*)mallo
您可能关注的文档
- 中小企业的风险控.pptx
- 传染病防治法课件.pptx
- 特殊流体Ⅰ-超临界流体.pptx
- 工程经济的基础.pptx
- 六个核桃营销案例解析.pptx
- 保险基础知识讲座.pptx
- 心理学基本原理.pptx
- 三标体系标准知识.pptx
- 二一一年十一月四日.pptx
- 倒装句和省略句.pptx
- 小学生也能写出这样的美文[15篇].docx
- 人教版高中化学专项复习:盐类水解原理的应用、水解常数.pdf
- 2025“安全生产事故隐患排查”知识竞赛考试历年机考真题集附参考答案详解【培优】.docx
- 泛血管疾病抗栓治疗中国专家共识(2024版).pptx
- 2025“安全生产事故隐患排查”知识竞赛考试历年机考真题集含答案详解【A卷】.docx
- 2025“安全生产事故隐患排查”知识竞赛考试历年机考真题集(考点梳理)附答案详解.docx
- 2025“安全生产事故隐患排查”知识竞赛考试历年机考真题集含完整答案详解(全国通用).docx
- 2025“安全生产事故隐患排查”知识竞赛考试历年机考真题集带答案详解(培优).docx
- 2025“安全生产事故隐患排查”知识竞赛考试历年机考真题集含答案详解(巩固).docx
- 2025“安全生产事故隐患排查”知识竞赛考试历年机考真题集附参考答案详解【满分必刷】.docx
文档评论(0)