C语言 删除有序数组重复的元素

该文章介绍了如何通过双指针技术在有序数组中删除重复元素。首先以整型有序数组为例,展示了程序执行过程,然后提供了两个代码实现:一个针对整型数组,另一个是泛化的版本,适用于任何类型的数据,通过传入比较函数来判断元素是否相等。这两个函数在遍历过程中,当遇到不相等的元素时,将非重复元素移动到数组前面,最终返回新数组的长度。
摘要由CSDN通过智能技术生成

本篇文章介绍使用“双指针”的方法遍历有序数组,并完成数组重复元素的删除。

1、以一个整型有序数组为例

以一个整型有序数组为例,展示程序执行的过程。

 注:图中左上角的数字为循环的次数。

2、代码实现

(1)对于整形有序数组

size_t removeDuplicates_int_array(int* arr, size_t count)
{
	size_t slow = 0, fast = 1;
	while (fast < count)
	{
		if (arr[fast] != arr[slow])
		{
			slow = slow + 1;
			arr[slow] = arr[fast];
		}
		fast = fast + 1;
	}
	return slow + 1;//返回新数组的长度
}

(2)对于更一般的有序数组

size_t removeDuplicates_array(void* ptr, size_t count, size_t size, bool (*isEqual)(const void*, const void*))
{                                                                        //isEqual函数用于判断数组元素是否相等
	size_t slow = 0, fast = 1;
	while (fast < count)
	{
		if (!isEqual((char*)ptr + slow * size, (char*)ptr + fast * size))
		{
			slow++;
			memcpy((char*)ptr + slow * size, (char*)ptr + fast * size, size);
		}
		fast++;
	}
	return slow + 1;//返回新数组的长度
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值