数组删除
//删除元素
int deleteArray(int* arr, int size, int key) {
if (size<=0)
{
return -1;
}
int index = 0;
for (size_t i = 0; i < size; i++)
{
if (arr[i] == key) {
index++;
}
else {
//数组前移
arr[i - index] = arr[i];
}
}
//找到了删除的值才元素数量才减
return size-index;
}
数组插入
//添加元素
int addArray(int* arr, int size, int key) {
//判断数组是否已满
if (size >= sizeof(arr) / sizeof(arr[0])) {
return -1;
}
// 判断数组是否为空或者key是否大于数组中最后一个元素
if (size == 0 || key > arr[size - 1]) {
arr[size] = key;
return size;
}
int index = size;
for (int i = size-1; i>=0; i--)
{
//拿到大于arr[i]的下一个下标
if (key > arr[i]) {
index = i+1;
break;
}
//数组后移
arr[i + 1] = arr[i];
}
arr[index] = key;
return index;
}
总结
数组删除需要考虑的情况?
判断size是否小于0,判断删除数据是否存在,删除之后要数据前移动,找到删除数据要数组大小减一
我这里使用的for循环是先找到key值的下标,然后才开始前移动,这里设置的index,是记录是否找到删除数据,找到后就开始向前移动,然后返回size-index,这个没找到就返回原来大小,找到就减一;
数组添加元素要考虑的情况?
判断数组是否已满,判断数组实际元素为0或者插入值比数组最后一个元素大,数据后移。
因为我这个值插入,所以要判断当前元素个数或者比最后一个元素大的情况,我for循环是从大的开始找,key值小于就往后移动,当找到比key值小的下标值,这里i+1是为了在前面插入,然后结束循环,我们后移也完成了,赋值完成返回插入下标。