河海大学C语言程序设计课件-第14章链表.pptVIP

河海大学C语言程序设计课件-第14章链表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言程序设计 第十四章 动态存储结构——链表 引例 数组为处理同类型的大量数据带来了方便,但使用过程中也存在缺陷。 首先,使用数组必须事先确定其长度,为防止越界,通常将长度定义得足够大。 造成存储空间的浪费 其次使用数组在处理元素的插入、删除操作时要伴随大量元素的移动 严重影响了处理效率 !引入链表,这是一种不需要预先分配固定长度的存储空间,可根据程序需要动态的扩大或缩小存储空间的数据结构。 引例——动态分配存储空间 输入一位学生选课的数目, 再输入所选的每门课程的学分数, 计算出该位学生本学期所选课程的学分数。 采用一种动态分配存储空间的方式: 1.输入学生所选课程的门数 2.根据课程数来分配存储空间,存储各课程的学分 3.当空间使用完毕后要释放所分配的存储空间。 引例——动态分配存储空间 #includestdio.h #includestdlib.h void main(void) { } int n, sum, i, *p; scanf(“%d”, n); if((p = (int *)calloc(n,sizeof(int))) == NULL) { printf(“Not able to allocate memory.\n”); exit(1);} printf(“Please input %d course’s credit:\n”, n); for(i = 0; i n; i++) scanf(“%d”, p + i); sum = 0; for(i = 0; i n; i++) sum = sum + *(p + i); printf(“The total credit is: %d\n”, sum); free(p); 主要内容 14.2 动态存储空间的分配与回收 14.3 必备知识 14.3.1 链表概述 14.3.2 建立和遍历链表 14.3.3 插入和删除结点 14.3.4 删除链表 14.4 程序设计应用 动态存储空间的分配与回收 14.2 6 14.2 动态存储空间的分配与回收 stdlib.h 1.malloc函数——动态存储分配函数 void *malloc(unsigned int size); 作用:在内存动态存储区中分配一个长度为size的连续空间 指针型函数:返回指针(分配空间的首地址) e.g. p=malloc(100); 开辟100字节的临时分配域,分配的首地址赋给P 如果此函数未能成功地执行(例如内存空间不足),则返回空指针(NULL) if((p = (int *)malloc(n*sizeof(int)) == NULL) { printf(“Not able to allocate memory.\n”); exit(1); } 14.2 动态存储空间的分配与回收 2.calloc函数——计数动态存储分配函数 void *calloc(unsigned int n,unsigned int size); 作用:内存的动态存储区中分配n个长度为size的连续空间(一般比较大,足以保存一个数组) 可以为一维数组开辟动态存储空间,n个元素,每个元素长度为size。 e.g. p=(int *)calloc(50,4); 开辟50×4个字节的临时分配域,把起始地址赋给指针变量p 14.2 动态存储空间的分配与回收 3.free函数 void free(void *p); 作用:释放指针变量p所指向的动态空间,使这部分空间能重新被其他变量使用,无返回值 p应是最近一次调用calloc或malloc函数时得到的函数返回值。 如:p=(int *)calloc(50,4); free(p); 14.2 动态存储空间的分配与回收 4.realloc函数 void *realloc(void *p,unsigned int size); 作用:改变已通过malloc函数或calloc函数获得了动态空间大小,重新分配空间。 将p所指向的动态空间的大小改变为size。p的值不变。如果重分配不成功,返回NULL。 e.g. realloc(p,50); 将p所指向的已分配的动态空间改为50字节 14.3 必备知识 14.3.1 链表概述 14.3.2 建立和遍历链表 14.3.3 插入和删除结点 14.3.4 删除链表 13.3 必备知识 12 14.3.1 链表概述 1.链表概述 思考:如何描述一个班的学生基本信息(学号、姓名、年龄等)? struct student{ int ID; ch

文档评论(0)

卖报的小行家 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档