-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharray.c
More file actions
98 lines (82 loc) · 1.73 KB
/
array.c
File metadata and controls
98 lines (82 loc) · 1.73 KB
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
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "array.h"
/*
* Input: Array arr
*
* Output array arr
*/
void print_array(array *arr) {
unsigned int i;
(void)putchar('[');
for (i=0; i<arr->length; i++)
printf("%d%s", arr->content[i], i<arr->length-1 ? " " : "");
(void)puts("]");
}
/* Try to allocate a new array */
array *new_array(void) {
array *rv=(array *)malloc(sizeof(array));
assert(rv!=NULL);
return rv;
}
/*
* Input: length of array to allocate
* Output: pointer to allocated array
*/
array *new_array_of_size(unsigned int length) {
array *rv=new_array();
rv->length=length;
if (length>0) {
rv->content=(int *)malloc(sizeof(int)*length);
assert(rv->content!=NULL);
} else
rv->content=NULL;
return rv;
}
/*
* Input: Array arr
*
* Free Array arr (NOT its contents!)
*/
void delete_array(array *arr) {
free(arr);
}
/*
* Input: Array to Delete
*
* Free array & its contents
*/
void delete_array_complete(array *arr) {
assert(arr!=NULL);
if (arr->content!=NULL)
free(arr->content);
delete_array(arr);
}
/*
* Input: Array arr, length n
* Output: Array rv
*
* Return array which contains (at most) first n elements of arr
*/
array *take(array *arr, unsigned int n) {
assert(arr!=NULL);
array *rv=new_array();
rv->length=(n>arr->length) ? arr->length : n;
rv->content=arr->content;
return rv;
}
/*
* Input: Array arr, Length n
* Output: Array rv
*
* Return (possibly zero length) array which contains n+1..arr->length
* elements of arr
*/
array *drop(array *arr, unsigned n) {
assert(arr!=NULL);
array *rv=new_array();
rv->length=(n<arr->length) ? arr->length-n : 0;
rv->content=arr->content+(arr->length-rv->length);
return rv;
}