🐺
动态数组的创建💳
表述:具有想同类型的a1,a2,a3 的表项
- 性质
- a0 为第一个元素
- an 为最后一个元素
- 除了 a0 和 an 外地其他元素,既有前驱,也有后继
- 线性表是能逐项访问和顺序存储
创建动态数组并且实现数组的动态更改
文件 Array.hpp📥
- 创建动态数组
/** 动态存放数组
* capacity 内存空间
* size 记录数组中的具体元素
*/
typedef struct DynamicArray
{
int *pAddr; // 具体存放数据的地址
int size; // 表示当前有多少个元素
int capacity; // 表示当前可以容纳的元素
}Dynamic_Array;
- 初始化动态函数
malloc 分配动态能存空间
/**
* 编写API 对数组进行初始化操作
* 初始化,插入操作 push_bach
*
*/
Dynamic_Array*DynamicArray_Init(){
Dynamic_Array*myArray = (Dynamic_Array*)malloc(sizeof(Dynamic_Array));
// 初始化
myArray->size = 0;
myArray->capacity = 20;
myArray->pAddr = (int*)malloc(sizeof(int)*myArray->capacity);
return NULL;
}
- 增加数据
根据传输进来的值增加到数组的末尾上面,注意判断数组内存空间是否足够。
void PushValueArray(Dynamic_Array*array,int value)
{
// 判断指针是否有效
if(array == NULL) {return;}
if( array->size == array->capacity ) {
// 申请最大的一块内存空间
int *newSpace = (int*)malloc(sizeof(int*)*array->capacity*2);
// 目标拷贝对象,被拷贝对象,被拷贝对象的大小
memcpy(newSpace,array->pAddr,array->capacity*sizeof(int));
// 删除内存指向的地址
free(array->pAddr);
// 更新容量
array->capacity = array->capacity *2;
array->pAddr = newSpace;
}
// 插入元素
array->pAddr[array->size] = value;
array->size++;
std::cout << "dd" << std::endl;
}
- 按照位置删除数据
/*位置删除数据*/
void RemovePosArray(Dynamic_Array*array,int pos)
{
// 判断指针是否有效
if(array == NULL) {return;}
if(pos < 0 || pos >= array->size){return;}
for (int i = pos; i < array->size-1; i++)
{
array->pAddr[i] = array->pAddr[i+1];
}
array->size--;
}
- 查找元素
和原有的查找方式类似
/*查找元素*/
int FindArray(Dynamic_Array*array,int value)
{
// 判断指针是否有效
if(array == NULL) {return -1;}
int pos = -1;
for (int i = 0; i < array->size; i++)
{
if(array->pAddr[i] == value){
pos = i;
break;
}
}
return pos;
}
- 对单元的数据进行查找删除
使用之前用的查找元素的方式返回了元素的位置数据。
/*根据值对单元数据进行删除*/
void RemoveValueArray(Dynamic_Array*array,int value)
{
// 判断指针是否有效
if(array == NULL) {return;}
// 直接使用位置删除
int posistion = FindArray(array,value);
RemovePosArray(array,posistion);
}
- 返回某个为位置的元素坐标
/*范围某个位置的元素*/
int AtArray(Dynamic_Array*array,int pos)
{
return array->pAddr[pos];
}
🌸🌸🌸完结撒花🌸🌸🌸
🌈🌈@FEA🌈🌈