Проблемы с пониманием pop () при реализации очереди с использованием стеков - PullRequest
0 голосов
/ 18 марта 2020

Это вопрос кода leetcode. Полный вопрос здесь: https://leetcode.com/problems/implement-queue-using-stacks/solution/

Вот полное решение.

class MyQueue:
    def __init__(self):
        self.s1 = []
        self.s2 = []

    def push(self, x):
        #Time complexity = O(1)
        #Space complexity = O(1)

        self.s1.append(x)

    def pop(self):
        #Time complexity = O(n)
        #Space complexity = O(n)
        self.peek()
        return self.s2.pop()

    def peek(self):
        #Time complexity = O(1)
        #space complexity = O(1)

        if self.s2 == []: #if s2 is empty
            while self.s1 != []: #while s1 is not empty
                self.s2.append(self.s1.pop()) #s2 takes in all the s1 values | i don't understand this line???
        return self.s2[-1]        

    def empty(self):
        #Time complexity = O(1)
        #Space complexity = O(1)
        return self.s1 == [] and self.s2 == []

Код работает нормально, но я не понимаю эту специфику c строка :

self.s2.append(self.s1.pop())

это из этой функции:

    def peek(self):

        if self.s2 == []: #if s2 is empty
            while self.s1 != []: #while s1 is not empty
                self.s2.append(self.s1.pop()) #s2 takes in all the s1 values
        return self.s2[-1]    

Я пытаюсь следовать коду, но не понимаю, как self.s1.pop() на самом деле что-то возвращает?

Кроме того, в чем разница в функциональности self.s1.pop() против self.pop()

Заранее большое спасибо!

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Функция pop () предполагает удаление верхнего элемента из стека и в то же время возвращает это удаленное значение, по возвращении оно собирается поместить все, что было возвращено и удалено из вершины стека s1, в вершину стека s2.

0 голосов
/ 18 марта 2020

Хорошо, извините, ребята. Я так глубоко изучил реальные самоопределяемые функции pop, что полностью забыл о встроенной в списки функции python pop ()! Решено!

...