c语言动态数组的实现以及相关增删的功能的实现

目录

一.动态数组:

二.动态数组的初始化

三:动态数组的数据插入:

四:数据的删除

五:动态数组的销毁:

六:完整代码

最后,如果这篇文章对你有所启发或者没什么启发那么就点点赞,收收藏,转转发,你们的支持就是我前进的动力(一个赞一道题),下次再见。


一.动态数组:

动态数组首要的是动态,而且为了这个数组能够适配任意类型,所以我们这里使用的是void*型的指针数组来存放数据的指针,通过指针来访问各种类型的数组。er


typedef struct x
{
	void** ptr;//指向void*类型的数组的指针
	int capacity;//数组的容量大小
	int num;//数组元素的个数
}D_array;

二.动态数组的初始化

首先申请一块空间,并且让ptr指向那块空间,然后将容量和数组元素个数进行初始化。


D_array* inti_data(int capacity)//初始化动态数组,返回的是array的指针
{
	D_array* array = (D_array*)malloc(sizeof(D_array));
	if (array == NULL)//如果开辟空间失败就返回空指针
		return  NULL;
	array->ptr = (void**)malloc(sizeof(void*) * capacity);//申请一片空间,用于存放数据的地址
	if (array->ptr == NULL)//判断是否为空
		return NULL;
	array->capacity = capacity;
	array->num = 0;
	return array;
}

三:动态数组的数据插入:

这里使用的方法是按位置插入,所以当给定的位置不合理时就会退出函数,

如果数组的大小已经不够的话就要对数组进行扩容

如果给定的位置大于现在数组有的元素个数,那么我们可以实行尾插,如果不是尾插,那么就要向后移动元素,给目的空间腾出一个位置来插入数据。


void insert_data(D_array* array, int pos, void* data)
{
	if (pos < 0)
	{
		printf("位置错误\n");
		return;
	}
	if (array->capacity == array->num)//扩容操作
	{
		int newcapacity = array->capacity + plus_capacity;
		void** newspace = (void**)malloc(sizeof(void*) * newcapacity);
		if (newspace == NULL)
		{
			printf("扩容失败\n");
			return;
		}
		memcpy(newspace, array->ptr, sizeof(void*) * array->capacity);
		free(array->ptr);//释放掉原来的
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值