C 删除后如何重新排列数组元素

C 删除后如何重新排列数组元素,c,arrays,algorithm,sorting,C,Arrays,Algorithm,Sorting,最近我在读一本编程书,发现了这样一个问题: 我有一个数组: array = [2,3,6,7,8,9,33,22]; 现在,假设我删除了4th位置的元素,即8 现在我必须重新排列数组,如下所示: Newarray = [2,3,6,7,9,33,22]; 我怎样才能做到这一点。我还必须最小化复杂性 编辑我别无选择,只能对其进行修改。要做到这一点,只需使用这两个功能,它就能正常工作 index=4;//You wanted to delete it from the array. me

最近我在读一本编程书,发现了这样一个问题:

我有一个数组:

  array = [2,3,6,7,8,9,33,22];
现在,假设我删除了
4th
位置的元素,即
8

现在我必须重新排列数组,如下所示:

  Newarray = [2,3,6,7,9,33,22];
我怎样才能做到这一点。我还必须最小化复杂性


编辑我别无选择,只能对其进行修改。

要做到这一点,只需使用这两个功能,它就能正常工作

index=4;//You wanted to delete it from the array.
memcpy(newarray,array,sizeof(array));
memmove(&newarray[index], &newarray[index + 1], sizeof(newarray)-1);

现在,
newarray
包含您想要删除的字符的精确副本

执行此操作时,只需使用这两个函数,即可正常工作

index=4;//You wanted to delete it from the array.
memcpy(newarray,array,sizeof(array));
memmove(&newarray[index], &newarray[index + 1], sizeof(newarray)-1);
现在,
newarray
包含您想要删除的字符的精确副本

您可以通过简单地在元素上复制下一个元素来“删除”数组中的值,这很容易做到:

结果数组将是
{2,3,6,7,9,33,22,22}

因此,您可以看到试图从编译时数组中“删除”一个元素的大问题:您不能

您可以覆盖元素,但数组的大小在编译时是固定的,在运行时实际上不能更改

一种常见的解决方案是手动跟踪数组中有效元素的实际数量,并确保在添加或删除元素时更新该大小。或者将未使用的元素设置为其他情况下不会使用的值(例如,如果数组只能包含正数,则可以将未使用的元素设置为
-1
,然后进行检查)


如果您不想使用库函数(为什么不?),则循环并设置,例如

array[4] = array[5];
array[5] = array[6];
依此类推。

您只需将下一个元素复制到元素上,就可以从数组中“删除”一个值,这很容易做到:

结果数组将是
{2,3,6,7,9,33,22,22}

因此,您可以看到试图从编译时数组中“删除”一个元素的大问题:您不能

您可以覆盖元素,但数组的大小在编译时是固定的,在运行时实际上不能更改

一种常见的解决方案是手动跟踪数组中有效元素的实际数量,并确保在添加或删除元素时更新该大小。或者将未使用的元素设置为其他情况下不会使用的值(例如,如果数组只能包含正数,则可以将未使用的元素设置为
-1
,然后进行检查)


如果您不想使用库函数(为什么不?),则循环并设置,例如

array[4] = array[5];
array[5] = array[6];

依此类推。

您只需向前一步将delIdx(删除索引)中的每个元素替换即可

for(int i=delIdx; i<(arr_size-1);i++)
{
    arr[i]= arr[i+1];
}

for(int i=delIdx;i您只需将delIdx(删除索引)中的每个元素向前移动一步即可

for(int i=delIdx; i<(arr_size-1);i++)
{
    arr[i]= arr[i+1];
}

for(int i=delIdx;iGet已删除元素的索引,然后执行memcpy
memcpy
将无法正常工作(复制重叠的内存区域是未定义的),而不是用于复制。或者我更应该说,我假设这两个数组是不同的,因为它们有不同的名称检查这些链接:和到OP:您想修改数组,还是想复制到新数组?获取已删除元素的索引,然后执行memcpy
memcpy
将无法正常工作(复制重叠内存区域未定义),而不是用于复制。或者我更应该说,我假设这两个数组是不同的,因为它们具有不同的名称检查这些链接:和指向OP的链接:是否要修改数组,还是要复制到新数组?memmove的第三个参数也是large@sameera如果我不想使用任何库函数呢?那你就必须要运行循环并检查索引是否不复制相同的内容,如果您愿意,我可以为您编写。@rahulmishray memmove的第三个参数也是large@sameera如果我不想使用任何库函数怎么办?那么你必须运行一个循环,检查索引是否不复制相同的函数,如果你愿意,我可以为你编写。@RahulMishra