-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdynamic_array.c
52 lines (42 loc) · 1.05 KB
/
dynamic_array.c
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
enum state {False, True};
typedef struct array {
int* array;
// size_t is unsigned type, so it assures representing
// positive values
size_t size;
size_t index;
} Array;
Array* create(int size) {
Array* array = (Array*) malloc(sizeof(Array));
array->array = (int*) malloc(sizeof(int) * size);
array->index = 0;
array->size = size;
return array;
}
int size(Array* array) {
return array->index;
}
int capacity(Array* array) {
return array->size;
}
enum state is_empty(Array* array) {
return size(array) == 0 ? True : False;
}
void push(Array* array, int data) {
if (array->size == array->index) {
array->size *= 2;
array->array = (int*) realloc(array->array, sizeof(int) * array->size);
}
array->array[array->index++] = data;
}
void set(Array* array, int index, int data) {
array->array[index] = data;
}
int at(Array* array, int index) {
return array->array[index];
}
void destroy(Array* array) {
free(array->array);
array->array = NULL;
array->size = array->index = 0;
}