【发布时间】:2020-10-29 15:25:37
【问题描述】:
我不确定如何使用 arrlist_addat 在特定索引处添加列表。我包括了我的一些其他方法和我的结构,所以你可以看到我是怎么做的。如果添加它,该方法必须返回一个布尔值 true,如果它失败,则返回 false。
感谢您的帮助。
struct ArrayList {
void** arr;
int size;
int maxSize;
int itemSize;
char* type;
};
struct ArrayList* arrlist_initialize(int maxSize, int itemSize, char* dataType) {
struct ArrayList* list = malloc(sizeof(struct ArrayList));
list->size = 0;
list->maxSize = maxSize;
list->itemSize = itemSize;
list->type = dataType;
list->arr = NULL;
return list;
}
bool arrlist_add(struct ArrayList* list, void* element) {
void** data = realloc(list->arr, sizeof(*list->arr));
if (data == NULL)
return false;
data[list->size] = element;
list->arr = data;
list->size = list->size+1;
return true;
}
bool arrlist_addat(struct ArrayList* list, int index, void* element) {
//Need help here.
}
void* arrlist_get(struct ArrayList* list, int index) {
void* value = list->arr[index];
if (value != NULL)
return value;
return NULL;
}
int arrlist_index_of(struct ArrayList* list, void* element) {
for (int i = 0; i < list->size; ++i) {
if (element == arrlist_get(list, i))
return i;
}
return -1;
}
【问题讨论】:
-
void** data = realloc(list->arr, sizeof(*list->arr));看起来很糟糕。应该是void** data = realloc(list->arr, sizeof(*list->arr) * (list->size + 1)); -
1.在数组 2 的末尾添加一个虚拟元素(可能是
NULL)。将数组的元素移到插入点之后 3. 存储要插入的值 -
alist_get用于arrlist_index_of()此处未定义。你的意思是arrlist_get? -
是的,应该是 arrlist_get
-
arrlist_addat应该插入一个元素(将现有元素向上移动一个索引)还是覆盖一个元素?另外,index是否可以大于list-size需要插入额外的NULL元素?