diff --git a/header/vectors.h b/header/vectors.h index 257dc2fd24bca4a96310064d7208157cc1191b18..09fdbc86b2302ef825368d4e3cbccd1678da01bf 100644 --- a/header/vectors.h +++ b/header/vectors.h @@ -22,5 +22,6 @@ typedef struct vector_* vector; vector vector_create(); int vector_length(vector vec); void vector_push(vector vec, type element); +type vector_pop(vector vec); #endif \ No newline at end of file diff --git a/src/test_vectors.c b/src/test_vectors.c index 3e181f1d528596003ddea6cf9edb054e3af6d2a3..8d0e78af735eb00ca41e3ce27f8d72ab41777015 100644 --- a/src/test_vectors.c +++ b/src/test_vectors.c @@ -19,5 +19,12 @@ int main() vector_push(test, 15); printf("Modified Vector lenght : %d \n", vector_length(test)); + + type val = vector_pop(test); + + printf("Modified Vector lenght : %d and the value we popped : %d \n", vector_length(test), val); + + + return 0; } \ No newline at end of file diff --git a/src/vectors.c b/src/vectors.c index 14400878c9506196193d8754032864162fa3953f..a19854c4b4d65b8e810d5505396660e4c8217ab0 100644 --- a/src/vectors.c +++ b/src/vectors.c @@ -39,7 +39,7 @@ void vector_push(vector vec, type element) { vec->content = realloc(vec->content, sizeof(type) * vec->capacity * 2); assert(vec->content != NULL); - + vec->capacity = vec->capacity * 2; } @@ -47,3 +47,20 @@ void vector_push(vector vec, type element) vec->length++; } +type vector_pop(vector vec) +{ + assert(vec->length > 0); + + vec->length--; + type tmp = vec->content[vec->length]; + + if(vec->length < (vec->capacity / 4)) + { + vec->content = realloc(vec->content, sizeof(type) * (vec->capacity / 2)); + assert(vec->content != NULL); + + vec->capacity = vec->capacity / 2; + } + + return tmp; +} \ No newline at end of file