欢迎来到天天文库
浏览记录
ID:58886344
大小:461.00 KB
页数:126页
时间:2020-09-30
《C语言与程序设计ppt第14章ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言与程序设计ppt-第14章9/15/20211华中科技大学计算机学院C语言课程组第14章线性数据结构本章首先介绍C语言的动态存储分配函数,进行动态数组设计。然后从自引用结构、动态创建结点和相关操作等方面介绍单向链表、双向链表和十字交叉链表。并进一步介绍堆栈、队列,以及基于线性数据结构的深度优先搜索、广度优先搜索等各种算法。这些数据结构和算法在程序设计中起着基础性作用,需要熟练掌握。9/15/20212华中科技大学计算机学院C语言课程组14.1动态存储分配14.1.1静态数据结构和动态数据结构到目前为止,本书中介绍的各种基本类型和导出类型的数据结构都是静态数据结构。静态数据结构
2、指在变量声明时建立的数据结构。在变量声明时如何对变量进行存储分配也确定了,并且在程序的执行过程中不能改变。动态数据结构是在程序运行过程中通过调用系统提供的动态存储分配函数,向系统申请存储而逐步建立起来的。在程序运行过程中,动态数据结构所占存储的大小可以根据需要调节,使用完毕时可以通过释放操作将所获得的存储交还给系统供再次分配。由于系统提供的动态存储分配函数的返回值是指向所分配存储的起始地址的指针,因此动态数据对象没有名字,对动态数据对象的访问只能通过指针进行。9/15/20213华中科技大学计算机学院C语言课程组14.1.1静态数据结构和动态数据结构数据结构可以分为线性数据结构和非线
3、性数据结构。前者涉及链表、栈、队列等;后者主要涉及树、图等。简单情况下,链表、栈、队列、树、图等数据结构可以用数组等静态数据结构模拟,但作用有限。更一般情况下,它们往往需要调用C的动态存储分配函数向系统申请存储而逐步建立的动态数据结构描述。采用动态存储分配构造的链表、栈、队列等数据结构称为线性动态数据结构;而采用动态存储分配构造的树、图等数据结构称为非线性动态数据结构。9/15/20214华中科技大学计算机学院C语言课程组14.1.2C语言的动态存储分配函数动态存储分配函数是C语言的标准函数,函数的原型声明在头文件中给出。因此使用动态存储分配函数必须先使用#inc
4、lude编译预处理命令。C语言提供下列与动态存储分配相关的函数。void*malloc(size_tsize);void*calloc(size_tn,size_tsize);void*realloc(void*p_block,size_tsize);voidfree(void*p_block);其中,size_t表示unsignedint,即无符号整型。它是在中通过typedefunsignedsize_t;定义的。9/15/20215华中科技大学计算机学院C语言课程组(1)malloc函数的功能malloc函数的原型为:void*malloc
5、(size_tsize);malloc函数的功能是向系统申请分配size个字节大小的连续存储区域。如果分配成功,返回新分配存储区域的首地址;如果分配失败(如内存容量不够),返回NULL。新分配存储区域未被初始化。例如,下面的代码片断就利用了malloc函数动态创建一个有6个元素的整型数组。inti,*p;p=(int*)malloc(6*sizeof(int));if(p)for(i=0;i<6;i++)p[i]=i;else{printf("dynamicallocfailed!");exit(-1);}在引用p指向的动态存储区中的数据之前,一般应判断p是否为空。若p为空,说明动态
6、存储分配失败,应输出提示并返回操作系统。9/15/20216华中科技大学计算机学院C语言课程组(2)calloc函数的功能calloc函数的原型为:void*calloc(size_tn,size_tsize);calloc函数的功能是向系统申请分配n项,每项的大小为size个字节的存储。如果分配成功,返回新分配存储区域的首地址;如果分配失败,则返回NULL。新分配存储区域均被初始化为0。例如,上面第1点代码片断中的语句p=(int*)malloc(6*sizeof(int));可以用calloc函数实现为:p=(int*)calloc(6,sizeof(int));它向系统申请6个
7、整型数据项,每个整型数据项的大小是sizeof(int)的存储区域。值得注意的是:所分配的内存存储区域是连续的。所以,当指针p指向新分配存储区域的首地址后,可以用p[i]表示引用新分配存储区域中的第i个数据项。9/15/20217华中科技大学计算机学院C语言课程组(3)realloc函数的功能realloc函数的原型为:void*realloc(void*p_block,size_tsize);realloc函数的功能是对指针p_block所指向的已经动态
此文档下载收益归作者所有