From aa784eaece4425c6145419ea9d1baa5da51a3cc6 Mon Sep 17 00:00:00 2001 From: leiyu3 Date: Thu, 22 Sep 2022 13:47:34 -0400 Subject: add resizing --- libvector.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'libvector.c') diff --git a/libvector.c b/libvector.c index 69537ab..f099e34 100644 --- a/libvector.c +++ b/libvector.c @@ -42,24 +42,13 @@ int at(vector_t vec, int index){ } void push(vector_t *vec, int value){ - if (is_full(*vec)){ - printf("Array out of Size!!\n\ - Can't push!! \n\ - Not yet implemented resize!!\n"); - exit(-1); - } - + resize_vec_check(vec); vec->arr[vec->cur_size] = value; vec->cur_size++; } void insert(vector_t *vec, int index, int val){ - if (is_full(*vec)){ - printf("Array out of Size!!\n\ - Can't insert!\n\ - Not yet implemented resize!!\n"); - exit(1); - } + resize_vec_check(vec); int tmp; for (int i = index; i <= vec->cur_size; i++){ @@ -82,6 +71,7 @@ void delete_vec(vector_t *vec, int index){ } vec->cur_size = vec->cur_size - 1; + resize_vec_check(vec); } void remove_val(vector_t *vec, int value){ @@ -93,6 +83,7 @@ void remove_val(vector_t *vec, int value){ } i++; } + resize_vec_check(vec); } void prepend(vector_t *vec, int value){ @@ -103,6 +94,7 @@ int pop(vector_t *vec){ // remove item at the end, return value int ret = vec->arr[vec->cur_size-1]; vec->cur_size--; + resize_vec_check(vec); return ret; } @@ -119,7 +111,7 @@ void destroy_vec(vector_t *vec){ free(vec->arr); } -int find(vector_t vec, int value){ +int find_vec(vector_t vec, int value){ for (int i = 0; i < size(vec); i++){ if (at(vec, i) == value){ return i; @@ -128,3 +120,20 @@ int find(vector_t vec, int value){ return -1; } +void resize_vec_check(vector_t *vec){ + int capacity = vec->max_size; + int cur_size = vec->cur_size; + + if (cur_size == capacity){ + resize_vec(vec, capacity*2); + } + if (cur_size <= capacity/4){ + resize_vec(vec, capacity/2); + } +} + +void resize_vec(vector_t *vec, int new_capacity){ + vec->arr = (int*)realloc(vec->arr, sizeof(int)*new_capacity); + vec->max_size = new_capacity; +} + -- cgit v1.2.3