如何删除数组中找到的元素并将数组元素移到左侧?

时间:2010-12-20 16:27:49

标签: c

int search(int a[]) {

   int i,V,index;
   printf("Enter the element (V),That you want to find:>");
   scanf("%d",&V);

   for (i=0;i<N;i++) {
       if(a[i]==V) {
           V=a[i];
           index=i;
       }
   }
   printf("%d is located in a[%d].",V,index
)

4 个答案:

答案 0 :(得分:18)

如果您不关心元素的排序,可以在O(1)时间内删除找到的元素。

// Find the element you're looking for.
int index = find(A, V);

// Stuff the last element into the index found.
A[index] = A[N-1];

// Reduce the total number of elements.
N--;

答案 1 :(得分:11)

如果我需要将所有内容移到阵列中,我会小心使用memmove()。然后用0或其他适当的值消除空出的元素。

if (index < N-1)
    memmove(&a[index], &a[index+1], ((N-1)-index) * sizeof(a[0]));
array[N-1] = 0;

答案 2 :(得分:0)

无法调整C数组的大小,因此如果不创建新数组,则无法执行此操作。您可以实施的一些建议:

  1. 通过使用第二个deleted bool数组或将项目设置为某个未使用的值(例如-1),将项目标记为已删除(延迟删除)。

  2. 使用向量,但这不再是C了。 STL向量具有erase()方法。

  3. 向量的删除效率很低,因此根据您执行的其他操作,您可以使用deque。同样,这将成为C ++,但您也可以在erase()上使用deque

答案 3 :(得分:0)

也许使用链表,二叉树或其他数据结构,可以快速搜索和删除包含目标数据的节点。