-
Notifications
You must be signed in to change notification settings - Fork 0
/
simple_array.c
136 lines (107 loc) · 3.31 KB
/
simple_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
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
#include <stdio.h>
#define CAPACITY 10
int arr[CAPACITY];
int size = -1;
int arr_len() {
return size + 1;
}
int arr_is_full() {
return (size >= CAPACITY - 1);
}
int arr_is_empty() {
return (size <= -1);
}
void arr_traverse() {
if (arr_is_empty()) {
printf("Array Is Empty\n");
return;
}
printf("Elements in array are: [ ");
for (int i = 0; i < arr_len(); i++) {
printf("%d ", arr[i]);
}
printf("]\n");
}
void arr_insert_beg(int val) {
if (arr_is_full()) {
printf("Overflow Condition\n");
return;
}
// Move all elements from the left to the right
for (int i = arr_len(); i > 0; i--) {
arr[i] = arr[i-1];
}
// Over-write first element
arr[0] = val;
size++;
}
void arr_insert_end(int val) {
if (arr_is_full()) {
printf("Overflow Condition\n");
return;
}
// over-write last element
arr[++size] = val;
}
void arr_insert_at_pos(int pos, int val) {
if (arr_is_full()) {
printf("Overflow Condition\n");
return;
} else if (pos <= 0 || pos >= arr_len()) {
pos <= 0 ? arr_insert_beg(val) : arr_insert_end(val);
return;
}
// Move elements from the left to the right
for (int i = arr_len(); i > pos; i--)
arr[i] = arr[i - 1];
// Over-write element at given position
arr[pos] = val;
size++;
}
void arr_delete_beg() {
if (arr_is_empty()) {
printf("Underflow Condition\n");
return;
}
// Same as insert exept that we shift
// the elements to the left instead of right
for (int i = 0; i < arr_len(); i++)
arr[i] = arr[i+1];
size--;
}
void arr_delete_end() {
if (arr_is_empty()) {
printf("Underflow Condition\n");
return;
}
size--;
}
void arr_delete_at_pos(int pos) {
if (arr_is_empty()) {
printf("Underflow Condition\n");
return;
} else if (pos <= 0 || pos >= size) {
pos <= 0 ? arr_delete_beg() : arr_delete_end();
return;
}
// we shift elements after position to the left
for (int i = pos; i < arr_len(); i++)
arr[i] = arr[i+1];
size--;
}
int main() {
// Insert values at the beginning, end, and specific positions
arr_insert_beg(5); // Array: [5]
arr_insert_end(10); // Array: [5, 10]
arr_insert_at_pos(1, 7);// Array: [5, 7, 10]
arr_insert_beg(2); // Array: [2, 5, 7, 10]
arr_insert_end(15); // Array: [2, 5, 7, 10, 15]
arr_insert_at_pos(3, 12);// Array: [2, 5, 7, 12, 10, 15]
arr_traverse(); // Elements in array are: [2 5 7 12 10 15]
// Delete values from the beginning, end, and specific positions
arr_delete_beg(); // Array: [5, 7, 12, 10, 15]
arr_delete_end(); // Array: [5, 7, 12, 10]
arr_delete_at_pos(2); // Array: [5, 7, 10]
arr_traverse(); // Elements in array are: [5 7 10]
return 0;
}