C语言动态数组销毁,【数据结构】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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值