删除多个元素(C语言实现)

网友投稿 652 2022-10-22

删除多个元素(C语言实现)

删除多个元素(C语言实现)

删除多个元素

​​描述​​​​格式​​​​样例​​​​题解及详细注释​​

描述

从长度为n的整数序列中删除指定位序的m个元素,按照原顺序输出剩余的元素。其中,1≤m≤n≤1000,原整数序列为a;要删除的元素位序按照严格单调递增的方式存储在序列b中,其中元素b[i]表示要从a中删除的元素的位序,输入数据保证0≤b[i]≤n-1, b[i]<b[i+1]。

例如:n=10,m=5,a={46, 7, 27, 50, 71, 79, 21, 56, 18, 77},b={0, 2, 3, 4, 5},

则删除后得到序列为{7, 21, 56, 18, 77 }

格式

输入格式 三行数据。 第1行两个正整数,分别表示n和m 第2行n个整数,表示待删除元素的序列a 第3行m个正整数,表示要删除元素的位序

输出格式 只有一行,表示a中剩余的元素,不得改变元素之间原来的先后顺序。

样例

输入样例

10 4 2 81 64 88 55 74 6 80 41 93 0 2 4 7

输出样例

81 88 74 6 41 93

题解及详细注释

#include #include #define maxn 1000//定义顺序表的结构体typedef struct { int data[maxn]; int len;}Sqlist;//输入表的的长度void read1(Sqlist *L){ scanf("%d",&L->len);}//输入表的数值void read2(Sqlist *L){ int i; for(i=0;ilen;i++) { scanf("%d",&L->data[i]); }}//删除操作,i是读取的表Q的数值void del1(Sqlist *L,int i)//想一想为什么del1函数要放在del2函数的前面{ int j; for(j=i;jlen;j++) { L->data[j]=L->data[j+1]; } L->len--;}//遍历表Q的数值,并且调用del1函数void del2(Sqlist *L,Sqlist *Q){ int i; for(i=Q->len-1;i>=0;i--) { del1(L,Q->data[i]); }}//输出删除后的表void pri(Sqlist *L){ int i; for(i=0;ilen;i++) { printf("%d ",L->data[i]); }}int main(){ Sqlist L,Q;//创建表L,Q read1(&L);//调用read1函数,读取L长度 read1(&Q);//同上 read2(&L);//调用read2函数,读取数值 read2(&Q);//同上 del2(&L,&Q);//调用del2函数,删除操作。注意先del2,del2中有del1 pri(&L);//输出表}

我是调用read1和read2函数读取输入,大家也可以直接在主函数里面直接读取读取输入,尝试写一下。若有更好的想法,还请评论区指教。

写于2021年7月21日00:01分,晚安,各位。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:xxl-sso- 分布式单点登录框架
下一篇:聊聊Mybatis的日志模块的适配器模式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~