顺序表-删

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]);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值