aboutsummaryrefslogtreecommitdiff
path: root/libvector.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvector.c')
-rw-r--r--libvector.c121
1 files changed, 121 insertions, 0 deletions
diff --git a/libvector.c b/libvector.c
new file mode 100644
index 0000000..b113abe
--- /dev/null
+++ b/libvector.c
@@ -0,0 +1,121 @@
1#include <stdio.h>
2#include <stdlib.h>
3#include "vector.h"
4
5vector_t vector_init(int size){
6 vector_t vec;
7 vec.max_size = size;
8 vec.arr = malloc(sizeof(int)*vec.max_size);
9 vec.cur_size = 0;
10 return vec;
11}
12
13int size(vector_t vec){
14 return vec.cur_size;
15}
16
17int capacity(vector_t vec){
18 return vec.max_size;
19}
20
21int is_empty(vector_t vec){
22 if (vec.cur_size == 0){
23 return 1;
24 }
25 return 0;
26}
27
28int is_full(vector_t vec){
29 if (vec.cur_size >= vec.max_size){
30 return 1;
31 }
32 return 0;
33}
34
35int at(vector_t vec, int index){
36 if (index >= vec.max_size){
37 printf("Index out of bound!!\n");
38 exit(1);
39 }
40
41 return vec.arr[index];
42}
43
44void push(vector_t *vec, int value){
45 if (is_full(*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;
53 vec->cur_size++;
54}
55
56void insert(vector_t *vec, int index, int val){
57 if (is_full(*vec)){
58 printf("Array out of Size!!\n\
59 Can't insert!\n\
60 Not yet implemented resize!!\n");
61 exit(1);
62 }
63
64 int tmp;
65 for (int i = index; i <= vec->cur_size; i++){
66 tmp = val;
67 val = vec->arr[i];
68 vec->arr[i] = tmp;
69 }
70 vec->cur_size += 1;
71}
72
73void delete_vec(vector_t *vec, int index){
74 if (!(index < vec->cur_size)){
75 printf("Invalid Index!\nFailed to Delete Element\n");
76 exit(-1);
77 }
78 int len = vec->cur_size - 1;
79
80 for (int i = index; i < len; i++){
81 vec->arr[i] = vec->arr[i+1];
82 }
83
84 vec->cur_size = vec->cur_size - 1;
85}
86
87void remove_val(vector_t *vec, int value){
88 int i = 0;
89 while (i < vec->cur_size){
90 if (vec->arr[i] == value){
91 delete_vec(vec, i);
92 continue;
93 }
94 i++;
95 }
96}
97
98void prepend(vector_t *vec, int value){
99 insert(vec, 0, value);
100}
101
102int pop(vector_t *vec){
103 // remove item at the end, return value
104 int ret = vec->arr[vec->cur_size-1];
105 vec->cur_size--;
106 return ret;
107}
108
109void print_vec(vector_t vec){
110 printf("[");
111 for (int i = 0; i < vec.cur_size; i++){
112 printf("%d ", vec.arr[i]);
113
114 }
115 printf("]\n");
116}
117
118void destroy_vec(vector_t *vec){
119 free(vec->arr);
120}
121