예제 #1
0
def test_push():
    stack = Stack()

    stack.push(1)
    assert stack.back() == 1
    assert stack.size == 1

    stack.push(3)
    assert stack.back() == 3
예제 #2
0
class Queue:
    """
    Очередь реализованная на 2 стеках

    При size = 0 push и pop вернет None
    """
    def __init__(self):
        self._stack_inp = Stack()  # для того чтобы складывать элементы
        self._stack_out = Stack()  # для извлечения элементов
        self.size = 0

    def push(self, value):
        """Добавить в очередь value"""
        self._stack_inp.push(value)
        self.size += 1
        return None

    def pop(self):
        """Извлечь из очереди первый элемент"""
        if self.size == 0:
            result = None

        elif self._stack_out.size != 0:
            result = self._stack_out.pop()
            self.size -= 1

        else:
            self._move_all_elements_from_inp_to_out()
            result = self._stack_out.pop()
            self.size -= 1

        return result

    def front(self):
        """Вернуть первый элемент в очереди без извлечения"""
        if self.size == 0:
            result = None

        elif self._stack_out.size != 0:
            result = self._stack_out.back()

        else:
            self._move_all_elements_from_inp_to_out()
            result = self._stack_out.back()

        return result

    def _move_all_elements_from_inp_to_out(self):
        """Переместить все элементы из входного стека в выходной"""
        while self._stack_inp.size != 0:
            val = self._stack_inp.pop()
            self._stack_out.push(val)
        return None