Deque data structure. Operations ---------- append(val: Any) -> None appendleft(val: Any) -> None extend(iterable: Iterable) -> None extendleft(iterable: Iterable) -> None pop() -> Any popleft() -> Any Observers --------- is_empty() -> bool Attrib
| 10 | |
| 11 | |
| 12 | class Deque: |
| 13 | """ |
| 14 | Deque data structure. |
| 15 | Operations |
| 16 | ---------- |
| 17 | append(val: Any) -> None |
| 18 | appendleft(val: Any) -> None |
| 19 | extend(iterable: Iterable) -> None |
| 20 | extendleft(iterable: Iterable) -> None |
| 21 | pop() -> Any |
| 22 | popleft() -> Any |
| 23 | Observers |
| 24 | --------- |
| 25 | is_empty() -> bool |
| 26 | Attributes |
| 27 | ---------- |
| 28 | _front: _Node |
| 29 | front of the deque a.k.a. the first element |
| 30 | _back: _Node |
| 31 | back of the element a.k.a. the last element |
| 32 | _len: int |
| 33 | the number of nodes |
| 34 | """ |
| 35 | |
| 36 | __slots__ = ("_back", "_front", "_len") |
| 37 | |
| 38 | @dataclass |
| 39 | class _Node: |
| 40 | """ |
| 41 | Representation of a node. |
| 42 | Contains a value and a pointer to the next node as well as to the previous one. |
| 43 | """ |
| 44 | |
| 45 | val: Any = None |
| 46 | next_node: Deque._Node | None = None |
| 47 | prev_node: Deque._Node | None = None |
| 48 | |
| 49 | class _Iterator: |
| 50 | """ |
| 51 | Helper class for iteration. Will be used to implement iteration. |
| 52 | Attributes |
| 53 | ---------- |
| 54 | _cur: _Node |
| 55 | the current node of the iteration. |
| 56 | """ |
| 57 | |
| 58 | __slots__ = ("_cur",) |
| 59 | |
| 60 | def __init__(self, cur: Deque._Node | None) -> None: |
| 61 | self._cur = cur |
| 62 | |
| 63 | def __iter__(self) -> Deque._Iterator: |
| 64 | """ |
| 65 | >>> our_deque = Deque([1, 2, 3]) |
| 66 | >>> iterator = iter(our_deque) |
| 67 | """ |
| 68 | return self |
| 69 |