从有序表中删除所有其值重复的元素

问题描述:有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不相同。

方法一:用k记录顺序表a中不重复的元素的个数,用temp记录不重复的元素。在遍历过程中让每个元素与temp比较,若该元素与temp不同则统计k的个数并将该不重复的元素向前放置在k位置上,若相同则是重复元素则继续向后判断,直至判断到表尾为止。

void delRept_1(int *a, int &n)
{
	int k = 1;		//默认第0个元素是不重复的,故k的初值为1 
	int temp = a[0];
	
	for(int i = 1; i < n; ++i)
	{
		if(a[i] != temp)
		{
			temp = a[i]; 	//给temp赋值不重复的元素值 
			a[k] = a[i];
			++k;
		}
	}
	n = k;		//修改顺序表a的长度 
}




方法二:因为是有序顺序表,值相同的元素一定在连续的位置上,用类似于直接插入排序的思想,初始时将第一个元素看作非重复的有序表。之后以此判断后面的元素是否与前面非重复有序表的最后一个元素相同,如果相同则继续向后判断,如果不同则插入到前面的非重复有序表的最后,直至判断到表尾为止。

void delRept_2(int *a, int &n)
{
	int i, j;
	
	for(i = 0, j = 1; j < n; ++j)
		if(a[i] != a[j])
			a[++i] = a[j];
	n = i + 1;
}

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值