aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile16
-rw-r--r--libvector.c121
-rw-r--r--main.c127
-rw-r--r--vector.c120
4 files changed, 257 insertions, 127 deletions
diff --git a/Makefile b/Makefile
index d37a3a1..14ec6f7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,17 @@
1CC=clang 1CC=clang
2CFLAGS=-Wall -g
2 3
4BINS = vector.o libvector.a main test
5all: $(BINS)
3 6
4main: main.c 7vector.o: vector.h libvector.c
5 gcc main.c -o main 8 $(CC) $(CFLAGS) -c libvector.c
9
10libvector.a: libvector.o
11 ar -cvq libvector.a libvector.o
12
13main: main.c libvector.a
14 $(CC) $(CFLAGS) -o $@ $^
15
16test: test.c
17 gcc test.c -o test -lcriterion
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
diff --git a/main.c b/main.c
index ab99fb3..0c0b282 100644
--- a/main.c
+++ b/main.c
@@ -1,129 +1,6 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <stdlib.h> 2#include <stdlib.h>
3 3#include "vector.h"
4
5typedef struct {
6 int *arr;
7 int max_size;
8 int cur_size;
9} vector_t;
10
11vector_t vector_init(int size){
12 vector_t vec;
13 vec.max_size = size;
14 vec.arr = malloc(sizeof(int)*vec.max_size);
15 vec.cur_size = 0;
16 return vec;
17}
18
19int size(vector_t vec){
20 return vec.cur_size;
21}
22
23int capacity(vector_t vec){
24 return vec.max_size;
25}
26
27int is_empty(vector_t vec){
28 if (vec.cur_size == 0){
29 return 1;
30 }
31 return 0;
32}
33
34int is_full(vector_t vec){
35 if (vec.cur_size >= vec.max_size){
36 return 1;
37 }
38 return 0;
39}
40
41int at(vector_t vec, int index){
42 if (index >= vec.max_size){
43 printf("Index out of bound!!\n");
44 exit(1);
45 }
46
47 return vec.arr[index];
48}
49
50void push(vector_t *vec, int value){
51 if (is_full(*vec)){
52 printf("Array out of Size!!\n\
53 Can't push!! \n\
54 Not yet implemented resize!!\n");
55 exit(1);
56 }
57
58 vec->arr[vec->cur_size] = value;
59 vec->cur_size++;
60}
61
62void insert(vector_t *vec, int index, int val){
63 if (is_full(*vec)){
64 printf("Array out of Size!!\n\
65 Can't insert!\n\
66 Not yet implemented resize!!\n");
67 exit(1);
68 }
69
70 int tmp;
71 for (int i = index; i <= vec->cur_size; i++){
72 tmp = val;
73 val = vec->arr[i];
74 vec->arr[i] = tmp;
75 }
76 vec->cur_size += 1;
77}
78
79void delete(vector_t *vec, int index){
80 if (!(index < vec->cur_size)){
81 printf("Invalid Index!\nFailed to Delete Element\n");
82 exit(-1);
83 }
84 int len = vec->cur_size - 1;
85
86 for (int i = index; i < len; i++){
87 vec->arr[i] = vec->arr[i+1];
88 }
89
90 vec->cur_size = vec->cur_size - 1;
91}
92
93void remove_val(vector_t *vec, int value){
94 int i = 0;
95 while (i < vec->cur_size){
96 if (vec->arr[i] == value){
97 delete(vec, i);
98 continue;
99 }
100 i++;
101 }
102}
103
104void prepend(vector_t *vec, int value){
105 insert(vec, 0, value);
106}
107
108int pop(vector_t *vec){
109 // remove item at the end, return value
110 int ret = vec->arr[vec->cur_size-1];
111 vec->cur_size--;
112 return ret;
113}
114
115void print_vec(vector_t vec){
116 printf("[");
117 for (int i = 0; i < vec.cur_size; i++){
118 printf("%d ", vec.arr[i]);
119
120 }
121 printf("]\n");
122}
123
124void destroy_vec(vector_t *vec){
125 free(vec->arr);
126}
127 4
128int main(void){ 5int main(void){
129 vector_t vec = vector_init(16); 6 vector_t vec = vector_init(16);
@@ -146,7 +23,7 @@ int main(void){
146 remove_val(&vec, 5); 23 remove_val(&vec, 5);
147 /* for (int i = 0; i < vec.max_size; i++){ */ 24 /* for (int i = 0; i < vec.max_size; i++){ */
148 /* printf("pop: %d\n", pop(&vec)); */ 25 /* printf("pop: %d\n", pop(&vec)); */
149 /* delete(&vec, 0); */ 26 /* delete_vec(&vec, 0); */
150 /* } */ 27 /* } */
151 28
152 printf("The size of the vector is %d.\n", size(vec)); 29 printf("The size of the vector is %d.\n", size(vec));
diff --git a/vector.c b/vector.c
new file mode 100644
index 0000000..2c8f8d2
--- /dev/null
+++ b/vector.c
@@ -0,0 +1,120 @@
1#include <stdio.h>
2#include <stdlib.h>
3
4vector_t vector_init(int size){
5 vector_t vec;
6 vec.max_size = size;
7 vec.arr = malloc(sizeof(int)*vec.max_size);
8 vec.cur_size = 0;
9 return vec;
10}
11
12int size(vector_t vec){
13 return vec.cur_size;
14}
15
16int capacity(vector_t vec){
17 return vec.max_size;
18}
19
20int is_empty(vector_t vec){
21 if (vec.cur_size == 0){
22 return 1;
23 }
24 return 0;
25}
26
27int is_full(vector_t vec){
28 if (vec.cur_size >= vec.max_size){
29 return 1;
30 }
31 return 0;
32}
33
34int at(vector_t vec, int index){
35 if (index >= vec.max_size){
36 printf("Index out of bound!!\n");
37 exit(1);
38 }
39
40 return vec.arr[index];
41}
42
43void push(vector_t *vec, int value){
44 if (is_full(*vec)){
45 printf("Array out of Size!!\n\
46 Can't push!! \n\
47 Not yet implemented resize!!\n");
48 exit(1);
49 }
50
51 vec->arr[vec->cur_size] = value;
52 vec->cur_size++;
53}
54
55void insert(vector_t *vec, int index, int val){
56 if (is_full(*vec)){
57 printf("Array out of Size!!\n\
58 Can't insert!\n\
59 Not yet implemented resize!!\n");
60 exit(1);
61 }
62
63 int tmp;
64 for (int i = index; i <= vec->cur_size; i++){
65 tmp = val;
66 val = vec->arr[i];
67 vec->arr[i] = tmp;
68 }
69 vec->cur_size += 1;
70}
71
72void delete(vector_t *vec, int index){
73 if (!(index < vec->cur_size)){
74 printf("Invalid Index!\nFailed to Delete Element\n");
75 exit(-1);
76 }
77 int len = vec->cur_size - 1;
78
79 for (int i = index; i < len; i++){
80 vec->arr[i] = vec->arr[i+1];
81 }
82
83 vec->cur_size = vec->cur_size - 1;
84}
85
86void remove_val(vector_t *vec, int value){
87 int i = 0;
88 while (i < vec->cur_size){
89 if (vec->arr[i] == value){
90 delete(vec, i);
91 continue;
92 }
93 i++;
94 }
95}
96
97void prepend(vector_t *vec, int value){
98 insert(vec, 0, value);
99}
100
101int pop(vector_t *vec){
102 // remove item at the end, return value
103 int ret = vec->arr[vec->cur_size-1];
104 vec->cur_size--;
105 return ret;
106}
107
108void print_vec(vector_t vec){
109 printf("[");
110 for (int i = 0; i < vec.cur_size; i++){
111 printf("%d ", vec.arr[i]);
112
113 }
114 printf("]\n");
115}
116
117void destroy_vec(vector_t *vec){
118 free(vec->arr);
119}
120