あってるのかよく分からず。
…てゆーか、ポインタで要素を保持してるのはまずいか…
#include
#includetypedef struct _List {
int initial_capacity;
int capacity;
int size;
void **items;
} List;void List_chcapa(List *l) {
void **new_items;
int new_capacity;
int i;new_capacity = (l->size - (l->size % l->initial_capacity)) + l->initial_capacity;
new_items = calloc(new_capacity, sizeof(void*));for(i=0; i
size; i++)
new_items[i] = l->items[i];if(l->items != NULL)
free(l->items);l->items = new_items;
l->capacity = new_capacity;
}List *new_List() {
List *l;l = malloc(sizeof(List));
l->initial_capacity = 10;
l->capacity = 10;
l->size = 0;
l->items = NULL;
List_chcapa(l);
return l;
}void List_add(List *l, void *item) {
l->size++;if(l->size > l->capacity)
List_chcapa(l);l->items[l->size - 1] = item;
}void *List_get(List *l, int idx) {
int i;if(idx >= l->size)
return NULL;return l->items[idx];
}void *List_delete(List *l, int idx) {
void *item;
int i;if(idx >= l->size)
return NULL;item = l->items[idx];
for(i=(idx+1); i
size; i++)
l->items[i-1] = l->items[i];l->size--;
if(l->size <= (l->capacity - l->initial_capacity))
List_chcapa(l);return item;
}void List_release(List *l) {
free(l->items);
free(l);
}int main() {
List *l;
char *str;
int i;l = new_List();
List_add(l, "aaaaa");
List_add(l, "bbbbb");
List_add(l, "ccccc");
List_add(l, "ddddd");
List_add(l, "eeeee");
List_add(l, "fffff");
List_add(l, "AAAAA");
List_add(l, "BBBBB");
List_add(l, "CCCCC");
List_add(l, "DDDDD");
List_add(l, "EEEEE");
List_add(l, "FFFFF");List_delete(l, 6);
List_delete(l, 6);
List_delete(l, 6);for(i=0; i
size; i++) {
str = List_get(l, i);
printf("%s\n", str);
}List_release(l);
return 0;
}