C语言数据结构一:动态数组

文章介绍了如何在C语言中实现动态数组,包括定义数据结构、初始化、插入元素、遍历、删除和销毁等操作。动态数组使用结构体封装,包含首地址、容量和大小等属性,并通过void*类型处理不同数据类型。文章还讨论了类型安全性和面向对象的封装改进。

一、概念认知

先说一个概念:数组是一段连续的内存空间。存储相同的数据类型。

数组的两个关键点:

  1. 连续内存;
  2. 相同类型。

第一个特征:起点。

首先连续内存:所以为了找到动态数组我们必须找到一个首元素地址。(内存首地址。)

如果不知道首地址,那无法找到并操作内存空间。

第二个特征:容量。

知道首地址了,我们需要知道元素的个数。动态数组:动态,可以动态插入、删除、扩展容量。所以我们必须有个初始容量。开辟多大空间,放多少个元素。除了容量,最好还有一个状态量:表示当前的数据量:也就是说长度。

  • 容量说的是:可以放多少数据。
  • 长度说的是:当前有多少数据。

我的钱包(=银行)(容量)无限大,而我当前拥有的钱有限(长度)。

第三个特征:类型。

我们虽然有了首地址,也有了元素个数,但是我们还是不知道开辟多大空间。因为我们还需要元素的大小。元素所占内存的大小,其实就是元素的类型。可是:

C语言无法动态获取数据的类型。

好在我们还有void*类型可以指向任意类型的指针。

所以我们虽然不知道具体元素的类型,但是我们可以定义一个通用的指针类型,指向我们的元素的地址即可。所以我们的元素就是地址。

所以我们的元素类型就是void*。所以我们的数组指针就是void**类型。


 二、实现

动态数组其实就是一种结构体。 一种自定义类型。

2.1定义数据结构

先写数据信息结构。

 首地址,就像存储字符串数组一样。

char * arr[] = {"aaa", "bbb", "ccc"};

 arr数组中每个元素都是char*类型,那么arr如果写入结构体中,可以定义为:

struct DemoStruct
{
    char ** arr;
    int b;
}

 同样道理:元素类型为void*。那么定义数组则为void** arr

//1. 先把所需要的数据信息结构定义下来
struct DynamicArray
{
	//数组存储元素的空间的首地址
	void **addr;
	//存储数据的内存中最大能够容纳多少元素
	int capacity; //容量
	//当前存储数据的内存中有多少个元素
	int size
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值