1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *arr;
int max_size;
int cur_size;
} vector_t;
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(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 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);
}
int main(void){
vector_t vec = vector_init(16);
printf("The size of the vector is %d.\n", size(vec));
printf("The capacity of the vector is %d.\n", capacity(vec));
printf("is_empty returns: %d.\n", is_empty(vec));
printf("-----\n");
for (int i = 0; i < vec.max_size; i++){
push(&vec, i);
}
print_vec(vec);
/* for (int i = 0; i < vec.max_size; i++){ */
/* printf("pop: %d\n", pop(&vec)); */
/* delete(&vec, 0); */
/* } */
printf("The size of the vector is %d.\n", size(vec));
printf("The first element of the vector is %d.\n", at(vec, 0));
printf("is_empty returns: %d.\n", is_empty(vec));
print_vec(vec);
destroy_vec(&vec);
return 0;
}
|