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
)
答案 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数组的大小,因此如果不创建新数组,则无法执行此操作。您可以实施的一些建议:
通过使用第二个deleted
bool数组或将项目设置为某个未使用的值(例如-1),将项目标记为已删除(延迟删除)。
使用向量,但这不再是C了。 STL向量具有erase()
方法。
向量的删除效率很低,因此根据您执行的其他操作,您可以使用deque
。同样,这将成为C ++,但您也可以在erase()
上使用deque
。
答案 3 :(得分:0)
也许使用链表,二叉树或其他数据结构,可以快速搜索和删除包含目标数据的节点。