数据集合Data无序且含重复值,删除值为key的数据元素
int main(void)
{
int a[ ]={ 2,3,5,3,4,8,3,3};
int key,n,i;
printf("输入key的值:");
scanf("%d",&key);
DelSameElement(a,8,key);
for(i=0;i<n;i++)
printf("%d",a[i]);
}
<1> int DelSameElement(int a[ ],int n,int key)
{
int i,j;
i=0;
while(i<n)
{
if(a[i]!=key) i++;
else
{
for(j=i;j<n-1;j++)
a[j]=a[j+1];
n--;
}
}
return n;
}
<2>int DelSameElement(int a[ ],int n,int key) /* 存在于集合中的key数据越多,<2>越好,即留下所有不是key的数据元素*/
{
int i,j;
for(i=j=0;i<n;i++) 或者进行优化 for(i=j=0;i<n&&(a[i]==key||(a[j++]=a[i])||1);i++)
if(a[ ]==key)
a[j++]=a[i];
return j;
}
虽然程序比较简单,但两种方法的对比显示出反向思维对程序明显的优化作用。