C malloc, realloc.如何从数组中删除单个元素



我有一个家庭作业来创建 2 个函数add将元素添加到动态数组(我所做的(并删除从该数组中删除指示元素。我对第二个功能有问题。我不知道如何编码。 附言。我不能使用 memmove((。

#include <stdlib.h>
#include <stdio.h>
void print_array(int *tab, int n);
void add(int x, int y, int *tab, int idx);
void remove_element(int *tab, int idx, int array_length);

int main() {
int *tab = malloc(24*sizeof(*tab));
int  idx = 0;
tab[idx++] = 44;
tab[idx++] = 82;
tab[idx++] = 57;
tab[idx++] = 77;
printf("Before insertn");
print_array(tab, idx);
idx++;
add(7, 0, tab, idx);
printf("After insertn");
print_array(tab, idx);
free(tab);
idx--;
printf("After deleten");
remove_element(tab, 3, idx);
print_array(tab, idx);
free(tab);
return(0);
}
void print_array(int *tab, int n) {
int i;
for (i = 0; i < n; i++) {
printf("t[%d] = %dn", i, tab[i]);
}
}
void add(int x, int y, int *tab, int idx) {
int i;
for (i = idx; i > y; i--) {
tab[i] = tab[i-1];
}
tab[y] = x;
}

void remove_element(int *tab, int idx, int array_length) {
void *tmp = realloc(tab, (array_length - 1) * sizeof(int) );
array_length = array_length - 1;
tab = tmp;
}

关于你的数组,你可以保留有关它的大小(例如iSize(和使用中的元素数量(例如iUse(的信息。 当然iUse<=isize

当你需要添加一个元素但数组太小(iUse==iSize(时,你增加它的大小,添加元素并递增iUse

当你删除一个元素时,你只是递减iUse,如果你不能使用memmov,做一个循环来向下移动所有更高的元素。

相关内容

  • 没有找到相关文章

最新更新