c语言数组元素的删除
给定一个整数序列a1,a2,...,an,删除序列中所有值为m的元素。要求:1、用数组。2、将值为m的数组元素从数组中删除,而不是简单的不输出m。输入有3行,第一行是一个...
给定一个整数序列a1,a2,...,an,删除序列中所有值为m的元素。
要求:
1、用数组。
2、将值为m的数组元素从数组中删除,而不是简单的不输出m。
输入有3行,
第一行是一个整数n,表示序列长度为n(0<n<100)。
第二行有n个整数,中间用空格分开。
第三行是一个整数m。
在单独一行中输出删除元素后序列。每个整数后面跟一个空格。
输入样列
7
1 2 3 4 5 3 6
3
输出样例
1 2 4 5 6 展开
要求:
1、用数组。
2、将值为m的数组元素从数组中删除,而不是简单的不输出m。
输入有3行,
第一行是一个整数n,表示序列长度为n(0<n<100)。
第二行有n个整数,中间用空格分开。
第三行是一个整数m。
在单独一行中输出删除元素后序列。每个整数后面跟一个空格。
输入样列
7
1 2 3 4 5 3 6
3
输出样例
1 2 4 5 6 展开
6个回答
展开全部
对于数组删除,一般就是使用后面数组元素前移的操作,来覆盖前一元素,达到删除的效果。。。。
例如数组a[10],要删除a[5]这个元素,那么只需要把后面的元素前移一位就行了,也就是a[5]=a[6],a[6]=a[7],a[7]=a[8],这样子a[5]这个元素的内容就会被全部抹杀掉了。。。。
不过这里存在一个问题,你一个结构体数组前移的时候,如何判断有多少个元素要前移呢。。。。
所以我的做法是在结构体里面定义一个标示符int flag。。。。
当对这个结构体数组元素赋值时,如a[10].name="KING" 时,那么就是说下标值为10的元素是存在的,赋完值后,来个a[10].flag=1 来标记一下。。。。
这样做的话,我们可以进行这样的删除操作了,如删除下标值为5的元素——
int i=5;
for(int j=i+1;a[j].flag==1;i++,j++)
{
a[i]=a[j];
/* 结构体数组可以直接这样子做,它会自动把a[i]里面的变量等于a[j]里面对应的变量 */
}
a[i].flag=0;
/* 如果你里面原来有10个元素,那么删除了其中一个,那就剩下9个,a[9]那个位置应该为空,一一把里面的元素清空太麻烦,直接把它的标示符flag等于0,就表示该位置为空的 */
例如数组a[10],要删除a[5]这个元素,那么只需要把后面的元素前移一位就行了,也就是a[5]=a[6],a[6]=a[7],a[7]=a[8],这样子a[5]这个元素的内容就会被全部抹杀掉了。。。。
不过这里存在一个问题,你一个结构体数组前移的时候,如何判断有多少个元素要前移呢。。。。
所以我的做法是在结构体里面定义一个标示符int flag。。。。
当对这个结构体数组元素赋值时,如a[10].name="KING" 时,那么就是说下标值为10的元素是存在的,赋完值后,来个a[10].flag=1 来标记一下。。。。
这样做的话,我们可以进行这样的删除操作了,如删除下标值为5的元素——
int i=5;
for(int j=i+1;a[j].flag==1;i++,j++)
{
a[i]=a[j];
/* 结构体数组可以直接这样子做,它会自动把a[i]里面的变量等于a[j]里面对应的变量 */
}
a[i].flag=0;
/* 如果你里面原来有10个元素,那么删除了其中一个,那就剩下9个,a[9]那个位置应该为空,一一把里面的元素清空太麻烦,直接把它的标示符flag等于0,就表示该位置为空的 */
展开全部
#include <stdio.h>
int main(){
int i,j,n,m,a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=0;i<n;i++)
if(a[i]==m)
{
for(j=i;j<n-1;j++)
a[j]=a[j+1];
i--;n--;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以设定 先把数组所有值都赋值
查找可以通过循环比对
for (i=0;i++;i<arraylenth)
{
if x==a[i]
{ flag=0;
a[i]=null;
}
}
然后通过判断flag来看看是否找到数据
将数组元素置空来表示删除
查找可以通过循环比对
for (i=0;i++;i<arraylenth)
{
if x==a[i]
{ flag=0;
a[i]=null;
}
}
然后通过判断flag来看看是否找到数据
将数组元素置空来表示删除
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果数组里全是3 那我输入要删除的3之后 楼主想要一个什么结果呢
是9个3 还是一个元素也不输出?
下面的程序可能能实现楼主的意思
#include<stdio.h>
void main()
{
int a[10]={1,3,7,61,86,12,75643,8989,1,3},n,i;
printf("input the number to delete:");
scanf("%d",&n);
for(i=0;i<10;i++)
if(a[i]!=n)
printf("%d ",a[i]);
}
是9个3 还是一个元素也不输出?
下面的程序可能能实现楼主的意思
#include<stdio.h>
void main()
{
int a[10]={1,3,7,61,86,12,75643,8989,1,3},n,i;
printf("input the number to delete:");
scanf("%d",&n);
for(i=0;i<10;i++)
if(a[i]!=n)
printf("%d ",a[i]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
找到这个数后把后面的数依次前提一位,输出时丢弃找到的最后几个..
#define N 10
main(){
int a[N]={1,3,7,61,86,12,75643,8989,1,3} ;
int i,j,tem,delnum;
tem=0;
printf("\nEnter del num:");
scanf("%d",&delnum);
for(i=0;i<N-tem;i++){
if(a[i]==delnum){
tem++;
for(j=i;j<N-tem;j++)
a[j]=a[j+1];
}
}
printf("\n");
for(i=0;i<N-tem;i++)
printf("%d,",a[i]);
getch();
return;
}
#define N 10
main(){
int a[N]={1,3,7,61,86,12,75643,8989,1,3} ;
int i,j,tem,delnum;
tem=0;
printf("\nEnter del num:");
scanf("%d",&delnum);
for(i=0;i<N-tem;i++){
if(a[i]==delnum){
tem++;
for(j=i;j<N-tem;j++)
a[j]=a[j+1];
}
}
printf("\n");
for(i=0;i<N-tem;i++)
printf("%d,",a[i]);
getch();
return;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询