# 实现C动态数组

·  阅读 597

• 初始化
• 插入
• 增加
• 修改
• 查询
• 删除元素

1. 容量int m_capacity，
2. 实际长度int m_size,
3. 内容(由于数组可以放任何类型的元素进去，所以基本的元素是(void *)类型，然后我们的数组里面包含多个元素，我们把他放到一个地址里面)
void *void *void *void *void *

``````struct dynamic_array{

int m_capacity;

int m_size;

};

#### 1. 初始化

``````struct dynamic_array * init_array(int capacity){

if(capacity <= 0){
return NULL;
}

return NULL;

};

``````struct dynamic_array * init_array(int capacity){

if(capacity <= 0){

return NULL;

}

struct dynamic_array *array = malloc(sizeof(struct dynamic_array));

if(array == NULL){
return NULL;
}

void **pAddr = malloc(sizeof(void *) * capacity);

return NULL;
}

array->m_capacity = capacity;

array->m_size = 0;

return array;

};

#### 2.插入操作

``````void insert_array(struct dynamic_array *array, int pos){

if(array == NULL){
return;
}

if(pos < 0 || pos > array->m_size){
return;
}

}

``````if(array->m_size == array->m_capacity){

int new_capacity = array->m_capacity * 2;

//开辟新的空间
void **new_pAddr = malloc(sizeof(void *) * new_capacity);
//把原有的数据拷贝到新的地址
//释放原有的地址
//修改容量和新的数组地址
array->m_capacity = new_capacity;

}

array->m_size += 1;

``````for(int i = array->m_size - 1;i > pos;i--){

}

``````void insert_array(struct dynamic_array *array, int pos, void *data){

if(array == NULL){
return;
}

if(data == NULL){
return;
}

if(pos < 0 || pos > array->m_size){
return;
}

if(array->m_size == array->m_capacity){

int new_capacity = array->m_capacity * 2;

void **new_pAddr = malloc(sizeof(void *) * new_capacity);

array->m_capacity = new_capacity;

}

array->m_size += 1;

for(int i = array->m_size - 1;i > pos;i--){

}

}

#### 3.新增元素

``````void add_array(struct dynamic_array *array, void *data){

if(array == NULL){
return;
}

if(data == NULL){
return;
}

insert_array(array, array->m_size, data);

}

#### 4.修改元素

``````void update_array(struct dynamic_array *array, int pos, void *data){

if(array == NULL){
return;
}

if(data == NULL){
return;
}

if(pos < 0 || pos >= array->m_size){
return;
}

}

#### 5.删除元素

``````void delete_array(struct dynamic_array *array, int pos){

if(array == NULL){
return;
}

if(pos < 0 || pos >= array->m_size){
return;
}

if(pos == array->m_size - 1){
//如果删除的是最后一个元素需要防止越界
}else{
for(int i=pos;i< array->m_size - 1;i++){
//把元素的值给到前面的位置
}
}

//更新数组长度
array->m_size -= 1;

}

#### 6.查询元素

``````void * search_array(struct dynamic_array *array, int pos){

if(array == NULL){
return NULL;
}

if(pos < 0 || pos >= array->m_size){
return NULL;
}

}

``````//初始化数组

struct dynamic_array *array = init_array(2);

//新增元素

// 通过打印我们能看到数组有三个元素，1，10，100
//我们修改一下下标为1的元素
update_array(array, 1, (void *)200);
// 通过打印我们能看到数组有三个元素，1，200，100

//我们删除末尾两个元素，只剩下第一个元素了
delete_array(array, 1);
delete_array(array, 1);

//这里是直接强转的，不建议这么做
int num = (int)array->pAddr[0];