Загрузка данных


class MyStack:

    def __init__(self):
        # Используем список для хранения элементов
        self.data = []
        # Указатель на начало очереди (откуда забираем)
        self.head = 0 
        # Указатель на конец очереди (куда добавляем)
        self.tail = 0 

    def push(self, x: int) -> None:
        # 1. Добавляем элемент в конец очереди (push to back)
        self.data.append(x)
        self.tail += 1
        
        # 2. Перемещаем все элементы, которые были до него, в конец.
        # Количество перемещений = текущий размер очереди минус 1.
        # Размер очереди = tail - head
        for _ in range(self.tail - self.head - 1):
            # Забираем из начала (peek/pop from front)
            val = self.data[self.head]
            self.head += 1
            
            # И кидаем в конец (push to back)
            self.data.append(val)
            self.tail += 1

    def pop(self) -> int:
        # Забираем первый элемент (вершину стека) из начала очереди
        val = self.data[self.head]
        self.head += 1
        return val

    def top(self) -> int:
        # Просто смотрим на первый элемент в очереди
        return self.data[self.head]

    def empty(self) -> bool:
        # Если указатели равны, значит элементов нет
        return self.head == self.tail