顺序表-删

来源:互联网 发布:淘宝香港aape正品店 编辑:程序博客网 时间:2024/05/16 10:46

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]);}
原创粉丝点击