当前位置:首页 » 编程语言 » c语言的删除数组
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言的删除数组

发布时间: 2023-05-24 20:20:28

c语言数组元素的删除与增加。

C语言中的数组本质上是在计算机内存中分配的连续空间。

如果需要对元素进行插入和删除,并不能直接将内存中为该数组分配的空间进行插入/新增和删除,而是只能通过数据复制的方式将本来不在这个位置的元素进行移动,看起来像是元素的前移和后移。

举个例子吧:整型数组(1, 2, 3, 4, 5),如果要把2删除,那么可以将3,4,5分别向前移动,变成(1, 3, 4, 5, 5)。由于数组长度分配以后不会变化,因此最后一个多余的5实际上并不能删掉,它只是表示无意义的位置。因此对于编程人员来讲,需要另一个参数来记录这个数组中你认为有用的元素是前多少个。

值得注意的是,如果数组长度不足以保存新的元素时,是无法动态地增加数组长度的。如果非要这么做,必须要在数组分配时保证数组大小足够大。这也就是一些新手经常将数组长度设置为1000,10000的原因。

回到这个问题:

//预定义的数组,长度为20
intarray[20]={0};
//数组当前有效长度
intarrayLen=0;

//如果不是全局数组,则需要将数组指针和数组长度指针传入进行修改
voidinsertArray(intnewElement,intindex)
{
//这里没有做数组长度的检验,你需要自己完成

inti;
for(i=arrayLen++;i>index;)
array[i--]=array[i-1];//后移

array[index]=newElement;
}

voiddeleteArrayElement(intindex)
{
for(;index<arrayLen;)
array[index++]=array[index+1];//前移。要删除的位置会被直接覆盖

arrayLen--;
}

㈡ C语言中删除一个数组元素

一般的数组元素无法删除,只能将值改变为另一个特定的值,然后发现这个值就直接转向下一个元素.

用链表可以删除表中的一个结点.

㈢ c语言:从数组中删除数据怎么做

#include<stdio.h>
#define N 10
void main( )
{
int a[N] , num ,i , *p , n=N;
int j;

/*输入N个数到数组a中;*/
for(i=0;i<n;i++)
{
scanf(“%d”,&num);
a[i]=num;
}

/*在数组a中删除指定的数num;*/
for(i=0;i<n;i++)
{
if(a[i] == num)
{
//a[i]=a[n];//如果不保留原数组里的顺序,此一句即可代替下边2行语句,同时省掉变量j

for(j=i;j<n-1;j++)
a[j]=a[j+1];

n--;
}
}

/*输出删除了num后的数组a;*/
for(i=0;i<n;i++)
printf("%d ",a[i]);

getchar();
}

㈣ C语言,删除数组元素

void main()
{
int i,j,n;
int a[10];
int k=0; //记录删除数据的个数
printf("请输入需要删除的数:\n");
scanf("%d",&n);
printf("请输入10个元素的数组: \n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<10;i++)
if (a[i]==n)
{
for (j=0;i+j<9;j++)
a[i+j]=a[i+j+1];
k++;//删除数据的个数加1
a[10-k] = 0; //清除最后一个已经前移过的数据
}

for (i=0;i<10-k;i++)//输出剩余的数据,后面的数据为0代表已经被删除的无意义数据,不必再输出了。
printf("%5d",a[i]);
}

㈤ C语言里删除数组怎么删除

你的数组是是一块连续的内存,不能直接delete其中的一个,而且它还不是new出来的,更不能delete了。。。
如果你非要实现删除一个元素的效果的话,建议你使用stl里的vector,作用跟数组差不多,删除的时候用erase()就可以了,不过这样vector会把之后的所以元素迁移,影响效率。最好的方法是自己写个单链表来存你的数据,要实现你的删除,就删除个节点好了。

㈥ C语言中怎么删除数组中的一个元素

#include "stdio.h"
int main()
{ int a[10],x;//x是要删除数组元素的下标
int i;
for(i=0;i<10;i++)
scanf("%d",&a[i]); //输入10个数据放在数组中
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("请输入要删除元素的下标值:\n");
scanf("%d",&x); //输入要删除的数组元素的下标
for(i=x;i<10;i++)
a[i]=a[i+1];
for(i=0;i<9;i++) //因为删除了一个元素,所以有9个元素
printf("%d ",a[i]);

}

㈦ 用c语言函数删除数组中的数据

既然是数组,表示数据为线性阵列了,想删除其中一个数据,是不可能的,只能用该位置以后的数据整体平移一个位置覆盖当前位置。例如:数组数据 1 2 3 4 5 6 7,想删除3,那么得到的新数组为1 2 4 5 6 7,其中 4 5 6 7 数据的位置相对原始数组位置整体平移减小1。
当然想是想快速删除数据,可以考虑使用数据链表,对数组单链即可

㈧ c语言数组元素的删除

对于数组删除,一般就是使用后面数组元素前移的操作,来覆盖前一元素,达到删除的效果。。。。

例如数组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,就表示该位置为空的 */