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)。

相关推荐
LuminousCPP12 小时前
数据结构-双向循环链表
c语言·数据结构·笔记·链表
白狐_79813 小时前
408数据结构第5章:树与二叉树②——遍历、线索树、森林与哈夫曼
数据结构·算法·深度优先
Jasmine_llq15 小时前
《P15800 [GESP202603 六级] 选数》
数据结构·long long·逆序线性 dp·从后往前推导·转移严格遵循题意·防止总和溢出·复杂度on
疯狂打码的少年15 小时前
【数据结构】串(字符串):基本概念与存储
数据结构·笔记
纵有疾風起16 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
wuyk55517 小时前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
LuminousCPP17 小时前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode
Nil20818 小时前
leetcode 三数之和
数据结构·算法·leetcode
noipp18 小时前
推荐题目:洛谷 P16689 出征
java·开发语言·数据结构·c++·算法·洛谷·luogu
青山木19 小时前
Hot 100 --- 最小栈
java·数据结构·算法·leetcode