MCPcopy Create free account
hub / github.com/BeeBombshell/Python-DSA / Deque

Class Deque

DSA/deque.py:1–69  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1class Deque:
2 def __init__(self, src_arr=[], max_size=300000):
3 self.length = max(max_size, len(src_arr)) + 1
4 self.buf = list(src_arr) + [None] * (self.length - len(src_arr))
5 self.head = 0
6 self.tail = len(src_arr)
7
8 def __index(self, i):
9 l = len(self)
10 if not -l <= i < l:
11 raise IndexError("index out of range: " + str(i))
12 if i < 0:
13 i += l
14 return (self.head + i) % self.length
15
16 def __extend(self):
17 ex = self.length - 1
18 self.buf[self.tail + 1 : self.tail + 1] = [None] * ex
19 self.length = len(self.buf)
20 if self.head > 0:
21 self.head += ex
22
23 def is_full(self):
24 return len(self) >= self.length - 1
25
26 def is_empty(self):
27 return len(self) == 0
28
29 def append(self, x):
30 if self.is_full():
31 self.__extend()
32 self.buf[self.tail] = x
33 self.tail += 1
34 self.tail %= self.length
35
36 def appendleft(self, x):
37 if self.is_full():
38 self.__extend()
39 self.buf[(self.head - 1) % self.length] = x
40 self.head -= 1
41 self.head %= self.length
42
43 def pop(self):
44 if self.is_empty():
45 raise IndexError()
46 ret = self.buf[(self.tail - 1) % self.length]
47 self.tail -= 1
48 self.tail %= self.length
49 return ret
50
51 def popleft(self):
52 if self.is_empty():
53 raise IndexError()
54 ret = self.buf[self.head]
55 self.head += 1
56 self.head %= self.length
57 return ret
58
59 def __len__(self):
60 return (self.tail - self.head) % self.length

Callers 1

deque.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected