01 一维数组静、动态分配

	一维数组是线性表的顺序存储方式。线性表的顺序存储方式就是分配一块练习的内存地址单元,把数据类型相同的数据依次放入这块内存单元中,在数组中即是把第一个数据元素存到下标为零的位置上,把线性表中相邻的元素存储到线性表的相邻位置。
	例子,就像一个同学占座位,自己先占一个座位,这个座位相当于存储空间的起始位置。一共五个人来学习,他需要占五个位置。在线性表中,我们估算这个线性表的最大存储容量,建立一个数组,数组长度就是这个最大存储容量。现实中这五个人又不一定都过来,假设有两个人没有来,真正被使用的就三个位置,也就是说,数组实际长度是3。有了起始位置,有了最大容量,我们就可以往里面增加数据了。
	一维数组静态分配代码:
typedef int ElemType;

#define MaxSize 50  //线性表的最大长度为50
typedef struct{
		Elemtype data[MaxSize];  //顺序表的元素,
		                                       //ElemType是由typedef定义的数据元素类型,为整型
		int length; //顺序表的当前长度
}SqList; //使用typedef重新定义的顺序表类型,结构体类型。

总结一下一维静态数组的三个关键要素:
1、存储空间的起始位置:数组data,它的存储位置就是数组空间的存储位置。
2、线性表的最大存储容量:数组长度MaxSize。
3、线性表的当前长度:length。

	记忆这种定义类型的代码,重要的就是弄清记牢你要实现的数据类型有哪些属性。

	随着数据的增加,线性表的长度也增大。不过,数组的当前长度不能超过数组的最大容量。想想只占了5个座位,但有7个人,一个一个坐那肯定是坐不下的。静态一维数组如果分配的空间远大于要存储的数据,那么就有一大片空间遭到浪费,但申请过少又不够用。动态数组分配的特点就是,按照需要来分配空间。
	在代码中我们使用malloc和free函数,共同维护一块内存池。当我们需要空间,malloc函数就从内存中找到一块空间并范围首地址的指针,当我们不需要的时候就可以用free函数释放这块空间交给系统。malloc函数的参数就是需要分配的字节数,malloc返回的类型是一个void*的指针,一般要求使用强制类型转换。free函数的参数要么是null,要么是之前从malloc的返回值。
	
	代码:
#define InitSize 100    //表长的初始定义
typedef struct{
		Elemtype *data; //指示动态分配数组的指针
									//ElemType是由typedef定义的数据元素的类型
		int length,     //顺序表的当前长度
		     MaxSize;   //动态数组的最大容量
}SqList;   //使用typedef重新定义的顺序表的类型
//动态分配空间
SqList L;
L.data = (ElemType *)malloc(InitSize*sizeof(ElemType));

总结:
1、找起点:L.data就是起点位置
2、改返参:malloc默认返回参数是void指针,需要在malloc前面强制转换类型(即数组指针的数据类型,语法为(数据类型*))。
3、赋参数:向malloc函数赋予你想分配的内存字节数,即表长×数组数据类型的字节数(用sizeof得到)。
malloc是memory与allocate(内存分配)的合成词。分配多少字节呢?n*sizeof(数据类型),这段内存的首地址是谁呢?转化为(ElemType *),指向数组指针(*data)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值