From 29db4e615e4bfdf6ec107e5cdd1547403eb2a6e4 Mon Sep 17 00:00:00 2001 From: leiyu3 Date: Thu, 22 Sep 2022 09:39:20 -0400 Subject: change to static library --- libvector.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 libvector.c (limited to 'libvector.c') diff --git a/libvector.c b/libvector.c new file mode 100644 index 0000000..b113abe --- /dev/null +++ b/libvector.c @@ -0,0 +1,121 @@ +#include +#include +#include "vector.h" + +vector_t vector_init(int size){ + vector_t vec; + vec.max_size = size; + vec.arr = malloc(sizeof(int)*vec.max_size); + vec.cur_size = 0; + return vec; +} + +int size(vector_t vec){ + return vec.cur_size; +} + +int capacity(vector_t vec){ + return vec.max_size; +} + +int is_empty(vector_t vec){ + if (vec.cur_size == 0){ + return 1; + } + return 0; +} + +int is_full(vector_t vec){ + if (vec.cur_size >= vec.max_size){ + return 1; + } + return 0; +} + +int at(vector_t vec, int index){ + if (index >= vec.max_size){ + printf("Index out of bound!!\n"); + exit(1); + } + + return vec.arr[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); + } + + 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); + } + + int tmp; + for (int i = index; i <= vec->cur_size; i++){ + tmp = val; + val = vec->arr[i]; + vec->arr[i] = tmp; + } + vec->cur_size += 1; +} + +void delete_vec(vector_t *vec, int index){ + if (!(index < vec->cur_size)){ + printf("Invalid Index!\nFailed to Delete Element\n"); + exit(-1); + } + int len = vec->cur_size - 1; + + for (int i = index; i < len; i++){ + vec->arr[i] = vec->arr[i+1]; + } + + vec->cur_size = vec->cur_size - 1; +} + +void remove_val(vector_t *vec, int value){ + int i = 0; + while (i < vec->cur_size){ + if (vec->arr[i] == value){ + delete_vec(vec, i); + continue; + } + i++; + } +} + +void prepend(vector_t *vec, int value){ + insert(vec, 0, value); +} + +int pop(vector_t *vec){ + // remove item at the end, return value + int ret = vec->arr[vec->cur_size-1]; + vec->cur_size--; + return ret; +} + +void print_vec(vector_t vec){ + printf("["); + for (int i = 0; i < vec.cur_size; i++){ + printf("%d ", vec.arr[i]); + + } + printf("]\n"); +} + +void destroy_vec(vector_t *vec){ + free(vec->arr); +} + -- cgit v1.2.3