C语言动态数据结构.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言动态数据结构.pptx》由会员分享,可在线阅读,更多相关《C语言动态数据结构.pptx(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、态数据结构本章开始介绍动态数据结构,主要介绍链表结构的建立、在链表中查找指定元素、插入一个新元素、删除一个元素等操作。学完本章内容后,要求深刻理解动态存储结构的概念,并正确运用。第1页/共62页7.1 从静态数据结构到动态数据结构在此之前,我们涉及到的都是静态数据结构,像数组、简单类型(int、float)等。静态数据结构的特点是由系统分配固定大小的存储空间,以后在程序运行的过程中,存储空间的位置和容量都不会再改变。而实际生活中常常有这样的问题,数据量的多少是动态变化的。第2页/共62页7.1 从静态数据结构到动态数据结构例如,图书馆的藏书量,在图书馆初建时,假设有10000本,随着时间的推移
2、,藏书的数量必定要增加。有人可能会想,在定义一个静态变量时,预留出一部分空间,但这也会引起一些问题,首先多出的那部分空间不知何时才能使用,在没有被使用之前一直被闲置;其次,谁又能保证增加的空间就足够呢?第3页/共62页7.1 从静态数据结构到动态数据结构问题的关键在于,此问题的数据本身就是变化的,而且是不确定的变化,什么时候变、怎么变都是未知的。对这样的问题用静态存储结构来描述和存放显然捉襟见肘,存在隐患。动态数据结构不确定总的数据存储量,而是为现有的每一个数据元素定义一个确定的初始大小的空间,若干个数据元素分配若干个同样大小的空间;当问题的数据量发生变化时,数据的存储空间的大小也发生变化。如
3、果数据量增加,就重新向系统申请新的空间;如果数据量减少,就将现有的多余的空间归还给系统。第4页/共62页7.2.动态内存分配使用计算机解决问题的所有方法都是通过使用系统提供给我们的基本命令或函数来实现的。所以首先让我们来看看,c的标准函数中有哪些是用于动态内存分配的,怎样使用。第5页/共62页7.2.1 ANSI C 中动态内存操作标准函数ANSI C中提供了若干个动态内存操作标准函数,它们的名称分别是malloc、calloc、realloc、free等。这些函数可以使用在任何的C环境中。第6页/共62页1malloc函数malloc函数是 C的标准函数之一。原型定义在malloc.h文件中
4、。原型为:void*malloc(unsigned int size);其作用是向系统申请一个确定大小(size 个字节)的存储空间,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。第7页/共62页1malloc函数使用格式:指针型变量=(基类型*)malloc(需要的存储空间的字节数);例7-1:为一个整数分配存储空间,需要的语句为:在文件的头部:#include 在说明部分:int*p;在程序中:p=(int*)malloc(sizeof(int);第8页/共62页测试malloc的程序举例:#include#include#include void
5、main()int*p;/*定义一个指向整型的指针变量*/int x;p=(int*)malloc(sizeof(int);if(!p)exit(0);p=&x;scanf(“%d”,p);printf(“x=%d”,x);第9页/共62页2calloc函数calloc函数是 C的标准函数之一。原型定义在malloc.h文件中。原型为:void*calloc(unsigned int n,unsigned int size);其作用是向系统申请 n 个大小为size 个字节的连续存储空间,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。可以为一维数组开辟一
6、片连续的动态存储空间。第10页/共62页2calloc函数使用格式:指针型变量=(数组元素类型*)calloc(n,每一个数组元素的存储空间的字节数);例7-2:为一个有10个整数的一维数组分配存储空间,需要的语句为:在文件的头部:#include 在说明部分:int*p;在程序中:p=(int*)calloc(10,sizeof(int);第11页/共62页使用calloc函数程序举例:#include#include#include main()int*p;int x;p=(int*)calloc(10,sizeof(int);if(!p)exit(0);for(i=0;i10;i+)sc
7、anf(“%d”,&x);*(p+i)=x;for(i=0;i10;i+)printf(“%6d”,*(p+i);第12页/共62页3realloc函数realloc函数是 C的标准函数之一。原型定义在malloc.h文件中。原型为:void*realloc(void*p,unsigned int size);其作用是向系统重新申请一个确定大小的存储空间,并将原存储空间中的数据值传送到新的地址空间的低端,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。原存储空间的数据将丢失。第13页/共62页3realloc函数使用格式:指针型变量=(基类型*)reall
8、oc(原存储空间的首地址,新的存储空间的字节数);例7-3:现有一个为10个整数分配的存储空间,其首地址为p1;由于数据量的增加,原存储空间已满,需要扩大原空间为20个整数的大小;需要的语句为:在文件的头部:#include 在说明部分:int*p2;在程序中:p2=(int*)realloc(p1,sizeof(int)*20);第14页/共62页程序举例:#include#include#include main()int*p1,*p2;int x;p1=(int*)malloc(sizeof(int)*10);if(!p1)exit(0);p2=(int*)realloc(p1,size
9、of(int)*20);if(!p2)exit(0);第15页/共62页 realloc 函数主要的用于当原分配空间已被占满,而新的数据又要加入到该空间时的状况。它的优点是可以自动地将原空间的内容全部传递到新空间中,不必程序员再编语句来实现。缺点是一旦新空间申请失败,原空间的内容也将丢失。对这一点,使用时应加以注意。第16页/共62页4free函数free函数是 C的标准函数之一。原型定义在malloc.h文件中,原型为:void free(void *p)其作用是释放由p所指的内存区,将一个存储空间归还给系统。使用格式:free(指针型变量);例7-4:将一个已分配存储空间释放,需要的语句为
10、 在文件的头部:#include 在说明部分:int*p;在程序中:free(p)第17页/共62页程序举例:#include#include#include main()int*p;p=(int*)malloc(sizeof(int);if(!p)exit(0);free(p);第18页/共62页c+中为进行动态操作提供的运算符new和delete在软件的研制过程中,程序中动态申请内存空间和释放内存空间是一件很常见的事,前面一节中,我们讲解了ANSI C 中的办法。利用标准库函数malloc、calloc、reallloc、free等。但malloc、calloc、reallloc等函数都要
11、求程序设计者知道应开辟空间的确切大小,返回值的类型需要强制类型转换。c+中对此进行了改进,为进行动态内存操作提供了运算符new和delete,来代替malloc和free。但在c+中依然保留了malloc和free,以便和C兼容。第19页/共62页1new 运算符new 是c+中提供的用于开辟一个动态存储空间的运算符。new 运算符的一般格式:变量指针=new 类型(初值);例如:(1)申请一个存放整数的空间:语句格式:p=new int;执行结果:开辟了一个整数大小的空间,并将该空间的首地址送入指向整型数据的指针变量p中。第20页/共62页(2)申请一个存放字符型数据的空间,并为该空间赋初值
12、a:语句格式:p=new char(a);执行结果:开辟了一个字节大小的空间,并将该空间的首地址送入指向字符型数据的指针变量p中。P所指空间中的数据值为字符 a。(3)申请一个存放实数的空间:语句格式:p=new float(1.414);执行结果:开辟了一个实数大小的空间,并将该空间的首地址送入指向实型数据的指针变量p中。并将该空间中赋入初值1.414。第21页/共62页(4)申请一个存放10个实数的数组的空间:语句格式:p=new float10;执行结果:开辟了一个10个实数大小的空间,将该空间的首地址送入指向实型数据的指针变量p中。注意:用new 为数组分配空间不能指定初值。第22页/
13、共62页2delete 运算符:delete 运算符是c+中的提供的实现动态内存释放功能的运算符,类似于标准库函数 free。一般格式为:delete 名字指针;例如:(1)释放一个存放整数的空间:如果 p=new int;则释放一个存放整数的空间的语句为:delete p;执行结果:将该整数空间释放掉,即将该资源归还给系统。第23页/共62页2delete 运算符:(2)释放一个存放10个实数的数组的空间:如果:p=new float10;则释放一个数组空间的语句为:delete p;执行结果:将该数组空间释放掉,即将该资源归还给系统。第24页/共62页2delete 运算符:new 试图创
14、建一个名字类型的对象,向系统申请sizeof(名字)个字节大小的空间。新对象的生存周期始于创建点,直到delete将其释放或到程序结束。如果申请成功,返回指向新对象的指针;若返回的指针为空指针,表示动态空间分配失败。注意:delete只能用于用new分配的内存的释放。第25页/共62页例7-5申请一个结构体类型的存储空间,用来存放相应类型的数据。解决问题要点:包含相关的头文件;定义一个结构体类型;定义结构体类型的变量;申请空间;对指定空间赋值;释放申请的空间;第26页/共62页程序举例:#include#include#include#include typedef struct LNode
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 动态 数据结构
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内