【数据结构】C语言动态数组使用和销毁

C语言静态数组常常接触,因为静态数组简单好用,使用动态数组不如使用链表,动态数组处境尴尬。

静态数组:

int a[32]={0}

动态数组:可以动态增加空间,但静态数组不能。

动态数组结构体。

struct dynamicArray
{
	void** addr;
	//在堆区开辟数组

	int capacity;
	//数组容量

	int Size;
	//数组大小(指的是数组中元素的个数)
};

 初始动态数组的容量。

struct dynamicArray* initArray(int Capacity) {

	if (Capacity <= 0) {
		return;

	}
	struct dynamicArray* arr = malloc(sizeof(struct dynamicArray));
	//申请结构体指针
	if (arr)
	{	
		//arr不为空
		
		arr->capacity = Capacity;
		arr->Size = 0;
		arr->addr = malloc(sizeof(void*) * Capacity);
	}
	else
	{
		printf("fail\n");
		return;
	}
	return arr;

}

向动态数组中插入数据。 

//插入数据(data)向数组(arr)中的某一个位置(pos)
void insertArray(struct dynamicArray* arr, int pos, void* data) {
	if (arr) {

		if (pos<0 || pos>arr->Size)
		{
			//无效位置,强制尾插
			pos = arr->Size;
		}
	}
	
	if (data == NULL)
	{

	}
	if (arr) {
		if (arr->capacity == arr->Size)
		{
			//如果满空间,申请新空间
			int newCapacity = arr->capacity * 2;

			void** newSpace = malloc(sizeof(void*) * newCapacity);
			//把原空间,拷贝新空间
			if (newSpace)
			{
				memcpy(newSpace, arr->addr, sizeof(void*) * arr->capacity);
				//释放原空间
				free(arr->addr);
				//指向新空间
				arr->addr = newSpace;

				arr->capacity = newCapacity;
				//更新容量
			}
			
		}

		//插入数据到指定位置
		for (int i = arr->Size - 1; i >= pos; i--)
		{

			arr->addr[i + 1] = arr->addr[i];

		}
		arr->addr[pos] = data;

		arr->Size++;//更新大小
	}
}

完整代码:

链接:https://pan.baidu.com/s/1D-KYLNDsr9D4vWdVF5u-ww 
提取码:kr6w

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值