算法村不简单的数组增删

数组删除

//删除元素
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是为了在前面插入,然后结束循环,我们后移也完成了,赋值完成返回插入下标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值