Total Complexity | 14 |
Total Lines | 46 |
Duplicated Lines | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | from abc import abstractmethod, ABCMeta |
||
84 | class ArrayQueue(Queue): |
||
85 | |||
86 | head = 0 |
||
87 | tail = 0 |
||
88 | s = [] |
||
89 | |||
90 | def __init__(self, capacity=None): |
||
91 | if capacity is None: |
||
92 | capacity = 10 |
||
93 | self.s = [0] * capacity |
||
94 | |||
95 | def iterate(self): |
||
96 | if self.is_empty(): |
||
97 | return |
||
98 | for i in range(self.head, self.tail): |
||
99 | yield self.s[i] |
||
100 | |||
101 | def enqueue(self, item): |
||
102 | self.s[self.tail] = item |
||
103 | self.tail += 1 |
||
104 | if self.tail == len(self.s): |
||
105 | self.resize(len(self.s) * 2) |
||
106 | |||
107 | def resize(self, new_size): |
||
108 | tmp = [0] * new_size |
||
109 | for i in range(self.head, self.tail): |
||
110 | tmp[i-self.head] = self.s[i] |
||
111 | self.s = tmp |
||
112 | self.tail = self.tail - self.head |
||
113 | self.head = 0 |
||
114 | |||
115 | def size(self): |
||
116 | return self.tail - self.head |
||
117 | |||
118 | def is_empty(self): |
||
119 | return self.size() == 0 |
||
120 | |||
121 | def dequeue(self): |
||
122 | if self.is_empty(): |
||
123 | return None |
||
124 | |||
125 | deleted = self.s[self.head] |
||
126 | self.head += 1 |
||
127 | if self.size() == len(self.s) // 4: |
||
128 | self.resize(len(self.s) // 2) |
||
129 | return deleted |
||
130 |