- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
华中科技大学计算机学院C语言课程组 C语言与程序设计The C Programming Language 第14章 线性数据结构 本章首先介绍C语言的动态存储分配函数,进行动态数组设计。 然后从自引用结构、动态创建结点和相关操作等方面介绍单向链表、双向链表和十字交叉链表。 并进一步介绍堆栈、队列,以及基于线性数据结构的深度优先搜索、广度优先搜索等各种算法。 这些数据结构和算法在程序设计中起着基础性作用,需要熟练掌握。 14.1 动态存储分配14.1.1 静态数据结构和动态数据结构 到目前为止,本书中介绍的各种基本类型和导出类型的数据结构都是静态数据结构。 静态数据结构指在变量声明时建立的数据结构。 在变量声明时如何对变量进行存储分配也确定了,并且在程序的执行过程中不能改变。 动态数据结构是在程序运行过程中通过调用系统提供的动态存储分配函数,向系统申请存储而逐步建立起来的。 在程序运行过程中,动态数据结构所占存储的大小可以根据需要调节,使用完毕时可以通过释放操作将所获得的存储交还给系统供再次分配。 由于系统提供的动态存储分配函数的返回值是指向所分配存储的起始地址的指针,因此动态数据对象没有名字,对动态数据对象的访问只能通过指针进行。 14.1.1 静态数据结构和动态数据结构 数据结构可以分为线性数据结构和非线性数据结构。 前者涉及链表、栈、队列等; 后者主要涉及树、图等。 简单情况下,链表、栈、队列、树、图等数据结构可以用数组等静态数据结构模拟,但作用有限。 更一般情况下,它们往往需要调用C的动态存储分配函数向系统申请存储而逐步建立的动态数据结构描述。 采用动态存储分配构造的链表、栈、队列等数据结构称为线性动态数据结构; 而采用动态存储分配构造的树、图等数据结构称为非线性动态数据结构。 14.1.2 C语言的动态存储分配函数 动态存储分配函数是C语言的标准函数,函数的原型声明在头文件stdlib.h中给出。 因此使用动态存储分配函数必须先使用#include stdlib.h编译预处理命令。 C语言提供下列与动态存储分配相关的函数。 void * malloc(size_t size); void * calloc(size_t n, size_t size); void * realloc(void * p_block, size_t size); void free(void * p_block); 其中,size_t表示unsigned int,即无符号整型。它是在stdio.h中通过typedef unsigned size_t;定义的。 (1)malloc函数的功能 malloc函数的原型为: void * malloc(size_t size); malloc函数的功能是向系统申请分配size个字节大小的连续存储区域。如果分配成功,返回新分配存储区域的首地址;如果分配失败(如内存容量不够),返回NULL。新分配存储区域未被初始化。 例如,下面的代码片断就利用了malloc函数动态创建一个有6个元素的整型数组。 int i,*p; p=(int *)malloc(6*sizeof(int)); if(p) for(i=0;i6;i++) p[i]=i; else{ printf(dynamic alloc failed!); exit(-1); } 在引用p指向的动态存储区中的数据之前,一般应判断p是否为空。 若p为空,说明动态存储分配失败,应输出提示并返回操作系统。 (2)calloc函数的功能 calloc函数的原型为: void * calloc(size_t n, size_t size); calloc函数的功能是向系统申请分配n项,每项的大小为size个字节的存储。如果分配成功,返回新分配存储区域的首地址;如果分配失败,则返回NULL。新分配存储区域均被初始化为0。 例如,上面第1点代码片断中的语句 p=(int *)malloc(6*sizeof(int)); 可以用calloc函数实现为: p=(int *)calloc(6,sizeof(int)); 它向系统申请6个整型数据项,每个整型数据项的大小是sizeof(int)的存储区域。 值得注意的是:所分配的内存存储区域是连续的。 所以,当指针p指向新分配存储区域的首地址后,可以用p[i]表示引用新分配存储区域中的第i个数据项。 (3)realloc函数的功能 realloc函数的原型为: void * realloc(void *p_block, size_t size); realloc函数的功能是对指针p_block所指向的已经动态分配的存储区
您可能关注的文档
最近下载
- 员工心态培训ppt课件.pptx VIP
- 直肠癌的外科治疗及进展.ppt VIP
- 2025年上海证券交易所招聘笔试预测试题及答案.doc VIP
- 料账管理课件.pptx VIP
- 能量密度指数(EII)计算方法.ppt VIP
- 红十字校本课程教学设计.docx VIP
- (正式版)Y-S-T 1700-2024 银矿采选业绿色工厂评价要求.docx VIP
- 2025年上海证券交易所招聘笔试专项练习含答案.doc VIP
- TCECA-G 0344—2025《零碳园区评价技术规范》.pdf VIP
- 第2课 春秋战国的历史巨变课件(共41张PPT)-中职高一上学期高教版(2025)中国历史全一册(含音频+视频).pptx VIP
文档评论(0)