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

相关推荐
清水白石00814 小时前
《Python 中 deque vs list:性能差异全解析与高效数据结构实战指南》
数据结构·python·list
Lucis__15 小时前
哈希实现&封装unordered系列容器
数据结构·c++·算法·哈希封装
星火开发设计15 小时前
栈的深度解析与C++实现
开发语言·数据结构·c++·学习·知识
SWAGGY..16 小时前
数据结构学习篇(8)---二叉树
数据结构·学习·算法
じ☆冷颜〃16 小时前
基于多数据结构融合的密码学性能增强框架
数据结构·经验分享·笔记·python·密码学
一起养小猫16 小时前
LeetCode100天Day7-移动零与搜索插入位置
数据结构·算法·leetcode·指针
草莓熊Lotso18 小时前
Python 进阶核心:字典 / 文件操作 + 上下文管理器实战指南
数据结构·c++·人工智能·经验分享·笔记·git·python
额呃呃1 天前
二分查找细节理解
数据结构·算法
无尽的罚坐人生1 天前
hot 100 283. 移动零
数据结构·算法·双指针
蜂蜜黄油呀土豆1 天前
Redis 底层实现深度解析:从 ListPack 到哈希表扩容
数据结构·redis·zset·sds·listpack·哈希表扩容