#define _CRT_SECURE_NO_WARNING
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct DynamicArray
{
void** addr;
int capacity;
int size;
};
struct DynamicArray* Init_DynamicArray(int capacity)
{
if (capacity <= 0)
{
return NULL;
}
struct DynamicArray* arr = malloc(sizeof(struct DynamicArray));
if (arr == NULL)
{
return NULL;
}
arr->capacity = capacity;
arr->addr = malloc(sizeof(void*) * capacity);
arr->size = 0;
return arr;
}
void Insert_DynamicArray(struct DynamicArray* arr, int pos, void* data)
{
if (arr == NULL)
{
return;
}
if (data == NULL)
{
return;
}
if (pos < 0 || pos >arr->size)
{
pos = arr->size;
}
if (arr->size >= arr->capacity)
{
int newcapacity = arr->capacity * 2;
void** newspace = malloc(sizeof(void*) * newcapacity);
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;
}
void Foreach_DynamicArray(struct DynamicArray* arr, void(*_callback)(void*))
{
if (arr == NULL)
{
return;
}
if (_callback==NULL)
{
return;
}
for (int i = 0; i < arr->size; i++)
{
_callback(arr->addr[i]);
}
}
struct Person
{
char name[64];
int age;
};
void myPrint(void* data)
{
struct Person* person = (struct Person*)data;
printf("Name =%s ,Age =%d \n", person->name,person->age);
}
void test()
{
struct DynamicArray* dd=Init_DynamicArray(5);
struct Person a1 = {"abcd",222};
struct Person a2 = { "dddd",333 };
struct Person a3 = { "ssss",444 };
struct Person a4 = { "eeee",555 };
struct Person a5 = { "gggg",666};
struct Person a6 = { "bbbb",777 };
Insert_DynamicArray(dd, 100, &a1);
Insert_DynamicArray(dd, 100, &a2);
Insert_DynamicArray(dd, 100, &a3);
Insert_DynamicArray(dd, 100, &a4);
Insert_DynamicArray(dd, 100, &a5);
printf("capatity1 : %d \n", dd->capacity);
Insert_DynamicArray(dd, 100, &a6);
printf("capatity2 : %d \n", dd->capacity);
Foreach_DynamicArray(dd,myPrint);
}
int main()
{
test();
system("puase");
return 0;
}