第7篇 动态数据结构.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 动态数据结构 教学目标 动态数据结构的概念 动态申请和释放内存的方法 链表的建立 链表结点的插入和删除算法 7.1 从静态数据结构到动态数据结构 7.2 动态内存分配 7.3 链表 7.4 本章小结 7.1 从静态数据结构到动态数据结构 静态数据结构的特点是由系统分配固定大小的存储空间,以后在程序运行的过程中,存储空间的位置和容量都不会再改变。如数组、简单类型(int、float)等。 实际生活中常常有这样的问题,数据量的多少是动态变化的。如何解决? 动态数据结构不确定总的数据存储量,而是为现有的每一个数据元素定义一个确定的初始大小的空间,若干个数据元素分配若干个同样大小的空间;当数据量发生变化时,数据存储空间的大小也发生变化。如果数据量增加,就重新向系统申请新的空间;如果数据量减少,就将现有的多余空间归还给系统。 7.2. 动态内存分配 ANSI C 中用于动态操作的标准函数 C++ 中用于动态操作的运算符——new和delete(不要求) ANSI C 中用于动态操作的标准函数 ANSI C中提供了若干个动态内存操作标准函数,它们的名称分别是malloc、calloc、realloc、free等。这些函数可以使用在任何的C环境中,其原型定义在malloc.h文件中。 malloc函数 原型: void *malloc(unsigned int size); 功能:向系统申请一个确定大小(size 个字节)的存储空间,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。 使用格式: 指针型变量=(基类型*)malloc(需要的存储空间的字节数); 例7-1:为一个整数分配存储空间,需要的语句为: 在文件的头部:#include malloc.h 在说明部分: int *p; 在程序中:p = (int *)malloc(sizeof(int)); 【例7-1】测试malloc的程序: #include malloc.h #include stdio.h #include stdlib.h void main() { int *p; p = (int *)malloc(sizeof(int)); if (!p) exit( 0 ); *p=10; printf(*p=%d\n, *p); free(p); } calloc函数 原型: void *calloc(unsigned int n , unsigned int size); 功能:向系统申请 n 个大小为size 个字节的连续存储空间,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。使用此函数可以为一维数组开辟一片连续的动态存储空间。 使用格式: 指针型变量 =(数组元素类型 *)calloc(n , 每一个数组元素的存储空间的字节数); 例7-2:为一个有10个整数的一维数组分配存储空间,需要的语句为: 在文件的头部:#include malloc.h 在说明部分: int *p; 在程序中:p = (int *)calloc(10 , sizeof(int)) ; 【例7-2】使用calloc函数程序 #include malloc.h #include stdio.h #include stdlib.h #define N 10 void main() { int *p; int x,i; p =(int *)calloc(N, sizeof(int)); if(!p) exit(0); for(i=0;iN;i++) { scanf(%d,x); *(p+i) = x; } for(i=0;iN;i++) printf(%6d, *(p+i)); free(p); } realloc函数 原型: void *realloc( void *p, unsigned int size); 功能:向系统重新申请一个确定大小的存储空间,并将原存储空间中的数据值传送到新的地址空间的低端,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空,原存储空间的数据也将丢失。 使用格式: 指针型变量 =(基类型 *)realloc( 原存储空间的首地址,新的存储空间的字节数); 例7-3:现有一个为10个整数分配的存储空间,其首地址为p; 由于数据量的增加,原存储空间已满,需要扩大原空间为20个整数的大小

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档