动态数据结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

if(!p) exit(0) ;
for(i=0;i<3;i++)
scanf("%d",p+i);
p=(int *)realloc(p,sizeof(int)*2);
if(!p) exit(0) ;
for(i=0;i<2;i++)
在文件的头部:#include <malloc.h> 在说明部分: int *p; 在程序中:p = (int *)malloc(sizeof(int));
8
【例7-1】测试malloc的程序:
#include <malloc.h> #include <stdio.h> #include <stdlib.h> void main() {
exit(0) ; free(p2); }
15
#include <malloc.h> #include <stdio.h>
补充程序
#include <stdlib.h>
void main()
{ int *p;
int i;
p =(int *)malloc(sizeof(int)*3);
// p =(int *)calloc(3,sizeof(int));
10
使用格式: 指针型变量 =(数组元素类型 *)calloc(n , 每一个数组 元素的存储空间的字节数); 例7-2:为一个有10个整数的一维数组分配存储空间, 需要的语句为:
在文件的头部:#include <malloc.h> 在说明部分: int *p; 在程序中:p = (int *)calloc(10 , sizeof(int)) ;
3
动态数据结构不确定总的数据存储量,而是为现 有的每一个数据元素定义一个确定的初始大小的 空间,若干个数据元素分配若干个同样大小的空 间;当数据量发生变化时,数据存储空间的大小 也发生变化。如果数据量增加,就重新向系统申 请新的空间;如果数据量减少,就将现有的多余 空间归还给系统。
4
7.2. 动态内存分配
教学目标
动态数据结构的概念 动态申请和释放内存的方法 链表的建立 链表结点的插入和删除算法
1
7.1 从静态数据结构到动态数据结构 7.2 动态内存分配 7.3 链表 7.4 本章小结
2
7.1 从静态数据结构到动态数据结构
静态数据结构的特点是由系统分配固定大小的存 储空间,以后在程序运行的过程中,存储空间的 位置和容量都不会再改变。如数组、简单类型 (int、float)等。 实际生活中常常有这样的问题,数据量的多少是 动态变化的。如何解决?
int *p; p = (int *)malloc(sizeof(int)); if (!p)
exit( 0 ); *p=10; printf("*p=%d\n", *p); free(p); }
9
calloc函数
原型: void *calloc(unsigned int n , unsigned int size); 功能:向系统申请 n 个大小为size 个字节的连续 存储空间,返回值为一个指向void类型的分配域 起始地址的指针值。如果此函数操作失败,返回 值为空。使用此函数可以为一维数组开辟一片连 续的动态存储空间。
11
【例7-2】使用百度文库alloc函数程序
#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));
14
【例7-3】使用realloc函数程序
#include <malloc.h> #include <stdio.h> #include <stdlib.h> void main() {
int *p1,*p2; p1 =(int *)malloc(sizeof(int)*10); if(!p1)
exit(0) ; p2=(int *)realloc(p1,sizeof(int)*20); if(!p2)
13
使用格式: 指针型变量 =(基类型 *)realloc( 原存储空间的首地 址,新的存储空间的字节数); 例7-3:现有一个为10个整数分配的存储空间,其首 地址为p; 由于数据量的增加,原存储空间已满,需要 扩大原空间为20个整数的大小;需要的语句为:
在文件的头部:#include <malloc.h> 在说明部分: int *p; 在程序中:p=(int *)realloc(p,sizeof(int)*20 );
if(!p)
exit(0);
for(i=0;i<N;i++)
{
scanf("%d",&x); *(p+i) = x;
scanf("%d",p+i);
}
for(i=0;i<N;i++)
printf("%6d", *(p+i));
free(p);
}
12
realloc函数
原型: void *realloc( void *p, unsigned int size); 功能:向系统重新申请一个确定大小的存储空间, 并将原存储空间中的数据值传送到新的地址空间 的低端,返回值为一个指向void类型的分配域起 始地址的指针值。如果此函数操作失败,返回值 为空,原存储空间的数据也将丢失。
❖ANSI C 中用于动态操作的标准函数 ❖C++ 中用于动态操作的运算符——new
和delete(不要求)
5
❖ANSI C 中用于动态操作的标准函数
ANSI C中提供了若干个动态内存操作标准函数, 它们的名称分别是malloc、calloc、realloc、 free等。这些函数可以使用在任何的C环境中, 其原型定义在malloc.h文件中。
6
malloc函数
原型: void *malloc(unsigned int size); 功能:向系统申请一个确定大小(size 个字节) 的存储空间,返回值为一个指向void类型的分 配域起始地址的指针值。如果此函数操作失败, 返回值为空。
7
使用格式: 指针型变量=(基类型*)malloc(需要的存储空间的字 节数); 例7-1:为一个整数分配存储空间,需要的语句为:
相关文档
最新文档