1)删除数据集合data中一个或若干个元素 (无重复值)
int Delete(int data[],int n,int key)
{
int i,j;
for(i=0;i<n && data[i]!=key;i++);
if(i!=n)
{
for(j=i;j<n-1;j++)
{
data[j]=data[j+1];
}
n--;
}
return n;
}
2)设数据集合data有重复值且无序,删除关键字为key的数据元素data={3,2,5,3,3,7,6,3},设key=3;
①边查边删
int Delete(int data[],int n,int key)
{
int i,j;
for(i=0;i<n;)
{
if(data[i]==key)
{
for(j=i;j<n-1;j++)
{
data[j]=data[j+1];
}
n--;
}
else
{
i++;
}
}
return n;
}
②留下该留的,就是删除该删的
int Delete(int data[],int n,int key)
{
int i,j;
for(i=0,j=0;j<n;j++)
{
if(data[j]!=key)
{
data[i]=data[j];
i++;
}
}
return i;
}
3)删出data中所有偶数
int Delete(int data[],int n)
{
int i,j;
for(i=0,j=0;j<n;j++)
{
if(data[j]%2==1)
{
data[i]=data[j];
i++;
}
}
return i;
}
设数据集合data,升序有序且有重复值,删去重复值
int Delete(int data[],int n)
{
int i,j;
for(i=0,j=1;j<n;j++)
{
if(data[i]!=data[j])
{
data[++i]=data[j];
}
}
return i+1;
}
4)实现JosephRing,约瑟夫环,即学生围成一圈,依次数数,数到k,k出圈只到全部出圈
void JosephRing(int data[],int n,int k)
{
int i,j,cnt=1,num=n;
while(n>1)
{
for(i=j=0;i<n;i++)
{
if(cnt!=k)
{
data[j++]=data[i];
cnt++;
}
else{
cnt=1;
printf("%5d",data[i]);
}
}
n=j;
}
printf("%5d",data[0]);
}