-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdynamic_array2.c
76 lines (65 loc) · 1.57 KB
/
dynamic_array2.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdlib.h>
#include <string.h>
#include "dynamic_array.h"
int CAPACITY_INIT = 1;
int GROWTH_FACTOR = 2;
int DArray_init(DArray* arr){
arr->array = (int *) malloc(CAPACITY_INIT*sizeof(int));
if (arr->array == NULL) {
return -1;
}
arr->upto = 0;
arr->size = CAPACITY_INIT;
return 1;
}
int append(DArray* arr, int i){
int *iptr;
if (arr->upto >= arr->size) {
/* tmp pointer needed below as if allocation failed, original array would be lost */
iptr = (int *) realloc(arr->array, arr->size*GROWTH_FACTOR*sizeof(int));
if (iptr == NULL) {
return -1;
}
arr->array = iptr;
arr->size *= GROWTH_FACTOR;
}
arr->array[arr->upto] = i;
return arr->upto++;
}
int get(DArray* arr, int index) {
if (index >= arr->upto || index < 0) {
return -1;
}
return arr->array[index];
}
int get_index(DArray* arr, int value) {
int i;
for (i=0; i< arr->upto; i++){
if (arr->array[i]==value) {
return i;
}
}
return -1;
}
void DArray_free(DArray *arr) {
free(arr->array);
}
/*your code here*/
int set(DArray* arr, int index, int value) {
if (index >= arr->upto || index < 0) {
return -1;
}
arr->array[index] = value;
return index;
}
int delete(DArray* arr, int value) {
int index = get_index(arr, value);
if (index >= arr->upto || index < 0) {
return -1;
}
int i;
for (i=index; i< arr->upto-1; i++){
arr->array[i] = arr->array[i+1];
}
return arr->upto--;
}