| Total Complexity | 13 |
| Total Lines | 40 |
| Duplicated Lines | 0 % |
| Changes | 2 | ||
| Bugs | 0 | Features | 0 |
| 1 | from abc import ABCMeta, abstractmethod |
||
| 80 | class ArrayStack(Stack): |
||
| 81 | """ Array implementation of stack |
||
| 82 | """ |
||
| 83 | |||
| 84 | def __init__(self, capacity=None): |
||
| 85 | if capacity is None: |
||
| 86 | capacity = 10 |
||
| 87 | self.s = [0] * capacity |
||
| 88 | self.N = 0 |
||
| 89 | |||
| 90 | def push(self, item): |
||
| 91 | self.s[self.N] = item |
||
| 92 | self.N += 1 |
||
| 93 | if self.N == len(self.s): |
||
| 94 | self.resize(len(self.s) * 2) |
||
| 95 | |||
| 96 | def resize(self, new_size): |
||
| 97 | tmp = [0] * new_size |
||
| 98 | for i in range(min(new_size, len(self.s))): |
||
| 99 | tmp[i] = self.s[i] |
||
| 100 | self.s = tmp |
||
| 101 | |||
| 102 | def pop(self): |
||
| 103 | value = self.s[self.N-1] |
||
| 104 | self.N -= 1 |
||
| 105 | if self.N == len(self.s) // 4: |
||
| 106 | self.resize(len(self.s) // 2) |
||
| 107 | return value |
||
| 108 | |||
| 109 | def is_empty(self): |
||
| 110 | return self.N == 0 |
||
| 111 | |||
| 112 | def size(self): |
||
| 113 | return self.N |
||
| 114 | |||
| 115 | def iterate(self): |
||
| 116 | if self.is_empty(): |
||
| 117 | return |
||
| 118 | for i in reversed(range(self.N)): |
||
| 119 | yield self.s[i] |
||
| 120 |