aboutsummaryrefslogtreecommitdiff
path: root/libvector.c
diff options
context:
space:
mode:
authorleiyu3 <s444814187@gmail.com>2022-09-22 13:47:34 -0400
committerleiyu3 <s444814187@gmail.com>2022-09-22 13:47:34 -0400
commitaa784eaece4425c6145419ea9d1baa5da51a3cc6 (patch)
treeb7870f82031ad67270f3b9dc288018a9e6c7b086 /libvector.c
parentb7d835727149e2bbc23e018251138645da8baebb (diff)
downloadvector_c-aa784eaece4425c6145419ea9d1baa5da51a3cc6.tar.gz
vector_c-aa784eaece4425c6145419ea9d1baa5da51a3cc6.zip
add resizing
Diffstat (limited to 'libvector.c')
-rw-r--r--libvector.c37
1 files changed, 23 insertions, 14 deletions
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){
42} 42}
43 43
44void push(vector_t *vec, int value){ 44void push(vector_t *vec, int value){
45 if (is_full(*vec)){ 45 resize_vec_check(vec);
46 printf("Array out of Size!!\n\
47 Can't push!! \n\
48 Not yet implemented resize!!\n");
49 exit(-1);
50 }
51
52 vec->arr[vec->cur_size] = value; 46 vec->arr[vec->cur_size] = value;
53 vec->cur_size++; 47 vec->cur_size++;
54} 48}
55 49
56void insert(vector_t *vec, int index, int val){ 50void insert(vector_t *vec, int index, int val){
57 if (is_full(*vec)){ 51 resize_vec_check(vec);
58 printf("Array out of Size!!\n\
59 Can't insert!\n\
60 Not yet implemented resize!!\n");
61 exit(1);
62 }
63 52
64 int tmp; 53 int tmp;
65 for (int i = index; i <= vec->cur_size; i++){ 54 for (int i = index; i <= vec->cur_size; i++){
@@ -82,6 +71,7 @@ void delete_vec(vector_t *vec, int index){
82 } 71 }
83 72
84 vec->cur_size = vec->cur_size - 1; 73 vec->cur_size = vec->cur_size - 1;
74 resize_vec_check(vec);
85} 75}
86 76
87void remove_val(vector_t *vec, int value){ 77void remove_val(vector_t *vec, int value){
@@ -93,6 +83,7 @@ void remove_val(vector_t *vec, int value){
93 } 83 }
94 i++; 84 i++;
95 } 85 }
86 resize_vec_check(vec);
96} 87}
97 88
98void prepend(vector_t *vec, int value){ 89void prepend(vector_t *vec, int value){
@@ -103,6 +94,7 @@ int pop(vector_t *vec){
103 // remove item at the end, return value 94 // remove item at the end, return value
104 int ret = vec->arr[vec->cur_size-1]; 95 int ret = vec->arr[vec->cur_size-1];
105 vec->cur_size--; 96 vec->cur_size--;
97 resize_vec_check(vec);
106 return ret; 98 return ret;
107} 99}
108 100
@@ -119,7 +111,7 @@ void destroy_vec(vector_t *vec){
119 free(vec->arr); 111 free(vec->arr);
120} 112}
121 113
122int find(vector_t vec, int value){ 114int find_vec(vector_t vec, int value){
123 for (int i = 0; i < size(vec); i++){ 115 for (int i = 0; i < size(vec); i++){
124 if (at(vec, i) == value){ 116 if (at(vec, i) == value){
125 return i; 117 return i;
@@ -128,3 +120,20 @@ int find(vector_t vec, int value){
128 return -1; 120 return -1;
129} 121}
130 122
123void resize_vec_check(vector_t *vec){
124 int capacity = vec->max_size;
125 int cur_size = vec->cur_size;
126
127 if (cur_size == capacity){
128 resize_vec(vec, capacity*2);
129 }
130 if (cur_size <= capacity/4){
131 resize_vec(vec, capacity/2);
132 }
133}
134
135void resize_vec(vector_t *vec, int new_capacity){
136 vec->arr = (int*)realloc(vec->arr, sizeof(int)*new_capacity);
137 vec->max_size = new_capacity;
138}
139