c - C malloc,重新分配。如何从数组中删除单个元素。
问题描述
我有一个家庭作业来创建 2 个函数add将元素添加到动态数组(我所做的)和remove哪个从该数组中删除指示的元素。我对第二个功能有疑问。我不知道如何编码。PS。我不能使用 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 insert\n");
print_array(tab, idx);
idx++;
add(7, 0, tab, idx);
printf("After insert\n");
print_array(tab, idx);
free(tab);
idx--;
printf("After delete\n");
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] = %d\n", 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
,请创建一个循环以将所有更高的元素向下移动。
推荐阅读
- isabelle - Isabelle 中的脆弱规则应用
- wso2 - 调用后端后自定义响应
- javascript - 如何在移动设备的 vuejs 中隐藏引导指令工具提示?
- python - GET请求后的Django rest框架AttributeError
- laravel - Laravel:尝试上传多个文件时出错
- java - Java RMI Object/DTO 传输 ClassCastException
- javascript - 使用 .find() 方法根据 productId click 查找 productId 作为参数
- php - 我正在尝试从输入字段创建搜索功能,以搜索相关链接在一起的多个表
- r - 在处理平局时在数据框列中找到与给定数字最接近的“下限数字”
- db2 - 将数据加载到远程 DB2 服务器时出错