C语言动态数据结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测试malloc的程序举例:
#include <malloc.h> #include <stdio.h> #include <stdlib.h> void main() { int *p; /*定义一个指向整型的指针变量*/ int x; p = ( int * )malloc( sizeof( int ) ); if ( !p ) exit( 0 ); p=&x; scanf(“%d”, p); printf(“x=%d”, x); }
7.1 从静态数据结构到动态数据结构
问题的关键在于,此问题的数据本身就是变化的, 而且是不确定的变化,什么时候变、怎么变都是 未知的。对这样的问题用静态存储结构来描述和 存放显然捉襟见肘,存在隐患。 动态数据结构不确定总的数据存储量,而是为现 有的每一个数据元素定义一个确定的初始大小的 空间,若干个数据元素分配若干个同样大小的空 间;当问题的数据量发生变化时,数据的存储空 间的大小也发生变化。如果数据量增加,就重新 向系统申请新的空间;如果数据量减少,就将现 有的多余的空间归还给系统。
3.realloc函数
使用格式: 指针型变量 =(基类型*)realloc( 原存储空间的首地 址,新的存储空间的字节数); 例7-3:现有一个为10个整数分配的存储空间,其首 地址为p1; 由于数据量的增加,原存储空间已满, 需要扩大原空间为20个整数的大小;需要的语句 为: 在文件的头部:#include <malloc.h> 在说明部分: int *p2; 在程序中: p2 = ( int * )realloc( p1, sizeof( int ) * 20 );
3.realloc函数
realloc函数是 C的标准函数之一。原型定义在 malloc.h文件中。 原型为: void *realloc( void *p, unsigned int size); 其作用是向系统重新申请一个确定大小的存储空 间,并将原存储空间中的数据值传送到新的地址 空间的低端,返回值为一个指向void类型的分配 域起始地址的指针值。如果此函数操作失败,返 回值为空。原存储空间的数据将丢失。
1.malloc函数
使用格式: 指针型变量 =(基类型*)malloc(需要的存储空间的字 节数); 例7-1:为一个整数分配存储空间,需要的语句为: 在文件的头部:#include <malloc.h> 在说明部分: int *p; 在程序中:p = ( int * )malloc ( sizeof( int ) ) ;
7.1 从静态数据结构到动态数据结构
例如,图书馆的藏书量,在图书馆初建时,假设 有10000本,随着时间的推移,藏书的数量必定 要增加。有人可能会想,在定义一个静态变量时, 预留出一部分空间,但这也会引起一些问题,首 先多出的那部分空间不知何时才能使用,在没有 被使用之前一直被闲置;其次,谁又能保证增加 的空间就足够呢?
7.2. 动态内存分配
使用计算机解决问题的所有方法都是通过使用 系统提供给我们的基本命令或函数来实现的。 所以首先让我们来看看,c的标准函数中有哪 些是用于动态内存分配的,怎样使用。
7.2.1 ANSI C 中动态内存操作标准函数
ANSI C中提供了若干个动态内存操作标准 函数,它们的名称分别是malloc、calloc、 realloc、free等。这些函数可以使用在任何 的C环境中。
1.malloc函数
malloc函数是 C的标准函数之一。原型定义在 malloc.h文件中。 原型为: void *malloc(unsigned int size); 其作用是向系统申请一个确定大小(size 个字节) 的存储空间,返回值为一个指向void类型的分配 域起始地址的指针值。如果此函数操作失败,返 回值为空。
使用calloc函数程序举例:
#include <malloc.h> #include <stdio.h> #include <stdlib.h> main(){ int *p; int x; p =(int *)calloc(10, sizeof(int)); if(!p) exit(0) ; for(i=0;i<10;i++) { scanf(“%d”,&x); *(p+i) = x; } for(i=0;i<10;i++) printf(“%6d”, *(p+i)); }
2.calloc函数
使用格式: 指针型变量 =(数组元素类型*)calloc(n , 每一个数 组元素的存储空间的字节数); 例7-2:为一个有10个整数的一维数组分配存储空 间,需要的语句为: 在文件的头部:#include <malloc.h> 在说明部分: int *p; 在程序中:p = (int *)calloc( 10 , sizeof(int)) ;
2.calloc函数
Fra Baidu bibliotek
calloc函数是 C的标准函数之一。原型定义在 malloc.h文件中。 原型为: void *calloc(unsigned int n , unsigned int size); 其作用是向系统申请 n 个大小为size 个字节的连 续存储空间,返回值为一个指向void类型的分配 域起始地址的指针值。如果此函数操作失败,返 回值为空。可以为一维数组开辟一片连续的动态 存储空间。
目录
态数据结构
本章开始介绍动态数据结构,主要介绍链表结构 的建立、在链表中查找指定元素、插入一个新元 素、删除一个元素等操作。学完本章内容后,要 求深刻理解动态存储结构的概念,并正确运用。
7.1 从静态数据结构到动态数据结构
在此之前,我们涉及到的都是静态数据结构,像 数组、简单类型(int、float)等。静态数据结构的特 点是由系统分配固定大小的存储空间,以后在程 序运行的过程中,存储空间的位置和容量都不会 再改变。而实际生活中常常有这样的问题,数据 量的多少是动态变化的。