天天看點

删除多個指定位置的元素——順序表的方法(後續更新連結清單)(C語言)

題目

題目:在長度為n的整數序列中删除指定為序的m個元素,按照原順序輸出剩餘的元素。其中,1≤m≤n≤1000,原序列為a,要删除的位序序列為b。例如:n=10,m=5,a={3,56,7,9,23,45,78,90,67,33},b={0,4,6,7,9},則輸出結果為{56,7,9,45,67}

下面是解析:

/*删除指定位置的元素,注意位序從0開始*/
int DelList(sqlist *L,int i)
{
    int k;
    if(i<0 || i>L->length-1 || L->length==0)
        return 0;
    for(k=i; k<L->length-1; k++)
    {
        L->data[k]=L->data[k+1];
    }
    L->length--;
    return 1;
}
           
/*删除多個元素
注意:若按照從前至後的順序由于長度變化會改變元素的位置
           采用從後往前删就不會影響前面的資料位置
*/
int DelMany(sqlist *La,sqlist *Lb)
{
    int k;
    for(k=Lb->length-1; k>=0; k--)
    {
        DelList(La,Lb->data[k]);
    }
    return 1;
}
           
/*輸出元素*/
void print(sqlist *L)
{
    int i;
    for(i=0; i<L->length-1; i++)
        printf("%d ",L->data[i]);
    printf("%d\n",L->data[L->length-1]);
}
           
int main()
{
    sqlist La,Lb;
    int i;
    scanf("%d %d",&La.length,&Lb.length);
    for(i=0; i<La.length; i++)
        scanf("%d",&La.data[i]);
    for(i=0; i<Lb.length; i++)
        scanf("%d",&Lb.data[i]);
    DelMany(&La,&Lb);
    print(&La);
    return 0;
}
           
/*完整代碼*/
#include<stdio.h>
#define maxsize 1100
typedef struct
{
    int data[maxsize];
    int length;
} sqlist;

/*删除指定位置的元素*/
int DelList(sqlist *L,int i)
{
    int k;
    if(i<0 || i>L->length-1 || L->length==0)
        return 0;
    for(k=i; k<L->length-1; k++)
    {
        L->data[k]=L->data[k+1];
    }
    L->length--;
    return 1;
}

/*删除多個元素
注意:若按照從前至後的順序由于長度變化會改變元素的位置
           采用從後往前删就不會影響前面的資料位置
*/
int DelMany(sqlist *La,sqlist *Lb)
{
    int k;
    for(k=Lb->length-1; k>=0; k--)
    {
        DelList(La,Lb->data[k]);
    }
    return 1;
}
/*輸出元素*/
void print(sqlist *L)
{
    int i;
    for(i=0; i<L->length-1; i++)
        printf("%d ",L->data[i]);
    printf("%d\n",L->data[L->length-1]);
}
int main()
{
    sqlist La,Lb;
    int i;
    scanf("%d %d",&La.length,&Lb.length);
    for(i=0; i<La.length; i++)
        scanf("%d",&La.data[i]);
    for(i=0; i<Lb.length; i++)
        scanf("%d",&Lb.data[i]);
    DelMany(&La,&Lb);
    print(&La);
    return 0;
}
           

期待一個小贊贊~

繼續閱讀