made work: removeAtIndex(x);

This commit is contained in:
Odweta
2023-12-25 01:34:00 +01:00
parent c5ffbb9e89
commit b00858c9be
5 changed files with 86 additions and 3 deletions
+24 -2
View File
@@ -8,12 +8,34 @@ int main() {
listPush(another_list, CHAR, &(char){'x'}); listPush(another_list, CHAR, &(char){'x'});
listPush(another_list, INT, &(int){123}); listPush(another_list, INT, &(int){123});
listPush(another_list, FLOAT, &(float){3.14}); listPush(another_list, FLOAT, &(float){3.14});
listPush(another_list, LIST, another_list); printf("do not put the list into itself, it does weird stuff\n");
listPush(another_list, LIST, another_list); // BIG NONO -> listPush(another_list, LIST, another_list);
listRemoveAt(another_list, 1);
list_t* l = listInit();
listPush(l, INT, &(int){5+2});
listPush(l, INT, &(int){5*2});
listPush(l, FLOAT, &(float){5/2});
listPush(another_list, LIST, l);
listPrint(another_list); listPrint(another_list);
listCleanup(another_list); listCleanup(another_list);
// vector_t* v = vectorInit(INT);
//
// vectorPush(v, &(int){123});
// vectorPush(v, &(int){456});
// vectorPush(v, &(int){789});
//
// vectorRemoveAt(v, 1);
//
// vectorPrint(v);
//
// vectorCleanup(v);
return 0; return 0;
} }
+2
View File
@@ -28,3 +28,5 @@ void listCleanup(list_t* l); // f
void* listPop(list_t* l); // popping the last value of the list and returning it void* listPop(list_t* l); // popping the last value of the list and returning it
void listInsertAt(list_t* l, int index, dataType_e type, void* element); // inserts an element at a given index void listInsertAt(list_t* l, int index, dataType_e type, void* element); // inserts an element at a given index
void listRemoveAt(list_t* l, int index);
+2 -1
View File
@@ -44,7 +44,8 @@ vectorToString(vector_t* v); // convert the vector into a regular string
void* void*
vectorGetAt(vector_t* v, int index); // get an element at the given index vectorGetAt(vector_t* v, int index); // get an element at the given index
void
vectorRemoveAt(vector_t* v, int index);
+9
View File
@@ -214,3 +214,12 @@ listInsertAt(list_t* l, int index, dataType_e type, void* element) {
} }
} }
} }
void
listRemoveAt(list_t* l, int index) {
vectorRemoveAt(l->data, index);
l->size -= 1;
if (l->size == l->capacity) {
l->capacity /= 2;
}
}
+49
View File
@@ -430,3 +430,52 @@ vectorInsertAt(vector_t* v, int index, void* element) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
void
vectorRemoveAt(vector_t* v, int index) {
if (v->size == 0) {
fprintf(stderr, "cannot remove from empty vector\n");
exit(EXIT_FAILURE);
} else if (index >= v->size || index < 0) {
fprintf(stderr, "index out of range\n");
exit(EXIT_FAILURE);
}
switch (v->type) {
case INT:
// move all elements to the right by one
for (int i = index; i < v->size; i++) {
*((int *)(v->data) + i) = *((int *)(v->data) + i+1);
}
break;
case FLOAT:
for (int i = index; i < v->size; i++) {
*((float *)(v->data) + i) = *((float *)(v->data) + i+1);
}
break;
case CHAR:
for (int i = index; i < v->size; i++) {
*((char *)(v->data) + i) = *((char *)(v->data) + i+1);
}
break;
case VECTOR:
for (int i = index; i < v->size; i++) {
*((vector_t*)(v->data) + i) = *((vector_t*)(v->data) + i+1);
}
break;
case LIST:
for (int i = index; i < v->size; i++) {
*((list_t*)(v->data) + i) = *((list_t*)(v->data) + i+1);
}
break;
default:
fprintf(stderr, "specify a valid vector type\n");
exit(EXIT_FAILURE);
}
v->size -= 1;
if (v->size < v->capacity/2) {
v->capacity /= 2;
v->data = realloc(v->data, v->elementSize * v->capacity);
}
}