-
Notifications
You must be signed in to change notification settings - Fork 0
/
Task15.py
44 lines (32 loc) · 1.08 KB
/
Task15.py
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
import ctypes
class MyDynMas:
def __init__(self):
self.length = 0
self.capacity = 1
self.data = self.make_array(self.capacity)
def __len__(self):
return self.length
def __getitem__(self, k):
if not 0 <= k < self.length:
return IndexError('K is out of bounds !')
return self.data[k]
def reallocate(self, old_arr, new_cap):
new_arr = self.make_array(new_cap)
for k in range(self.length):
new_arr[k] = old_arr[k]
self.data = new_arr
def add(self, value: int):
if self.length == self.capacity:
self.capacity *= 2
self.reallocate(self.data, self.capacity)
self.data[self.length] = value
self.length += 1
def remove(self):
if self.length == 0:
return IndexError('Empty array!')
self.length -= 1
if self.length * 4 < self.capacity:
self.capacity //= 2
self.reallocate(self.data, self.capacity)
def make_array(self, new_cap):
return (new_cap * ctypes.py_object)()