| 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 |