复现了一个简单的数据结构:动态数组(DynamicArray)。实现了一些简单的操作如:初始化、插入、按位删除。
结构体的定义:
struct dynamicArray {
void ** pAddr;
int m_capacity; //数组的容量
int m_size; //数组的大小
};
动态数组的初始化操作:对动态数组进行一些常见的初始化操作。
struct dynamicArray* init_DynamcArray(int capacity) {
if (capacity <= 0) {
return NULL;
}
struct dynamicArray * array = (struct dynamicArray *)malloc(sizeof(struct dynamicArray));
if (NULL == array) {
return NULL;
}
array->pAddr = (void**)malloc(sizeof(void*) * capacity);
array->m_capacity = capacity;
array->m_size = 0;
return array;
}
动态数组的插入操作:对指定的位置进行数据的插入。
void insert_DynamicArray(struct dynamicArray *arr, int pos, void *data) {
if (NULL == arr ||NULL == data) {
return;
}
// 非法插入操作将其调整为尾插操作
if (pos < 0 || pos > arr->m_size) {
pos = arr->m_size;
}
//判断数字是否已满,如果满了将进行扩容操作
if (arr->m_capacity == arr->m_size) {
int newcapacity = arr->m_capacity * 2;
void** newarr = (void**)malloc(sizeof(void*)*newcapacity);
memcpy(newarr, arr->pAddr, sizeof(void*)*arr->m_capacity);
free(arr->pAddr);
arr->pAddr = newarr;
arr->m_capacity = newcapacity;
}
//对数据进行移动
for (int i = arr->m_size - 1; i >= pos; i--) {
arr->pAddr[i+1] = arr->pAddr[i];
}
arr->pAddr[pos] = data;
arr->m_size++;
}
动态数组的删除:通过位置对数组元素进行删除。
void removeBypos_DynamicArray(struct dynamicArray * arr, int pos) {
if (NULL == arr) {
return;
}
//非法位置
if (pos-1 < 0 || pos > arr->m_size) {
return;
}
for (int i = pos-1; i < arr->m_size; i++) {
arr->pAddr[i] = arr->pAddr[i + 1];
}
arr->m_size--;
}