Подтвердить что ты не робот

Структура данных стека в python

У меня есть 2 проблемы с кодом ниже:

  • push (o) выдает исключение TypeError: может назначать только итерацию.
  • Должен ли я вызывать исключение, если pop() вызывается в пустом стеке?

    class Stack(object):
    
        def __init__(self):
            self.storage = []
    
        def isEmpty(self):
            return len(self.storage) == 0
    
        def push(self,p):
            self.storage[:0] = p
    
        def pop(self):
            """issue: throw exception?"""
            return None
    
4b9b3361

Ответ 1

Не нужно прыгать через эти циклы, см. 5.1.1 Использование списков в виде стеков

Если вы настаиваете на использовании методов isEmpty() и push(), вы можете сделать:

class stack(list):
    def push(self, item):
        self.append(item)
    def isEmpty(self):
        return not self

Ответ 2

Вы правы в использовании композиции вместо наследования, потому что наследование приводит методы, которые вы не хотите раскрывать.

class Stack:
  def __init__(self):
    self.__storage = []

  def isEmpty(self):
    return len(self.__storage) == 0

  def push(self,p):
    self.__storage.append(p)

  def pop(self):
    return self.__storage.pop()

Таким образом, ваш интерфейс работает примерно так же, как list (например, такое же поведение на pop), за исключением того, что вы заблокировали его, чтобы никто не вмешивался в внутренности.

Ответ 3

Я не буду говорить о структуре списка, как это уже было рассмотрено в этом вопросе. Вместо этого я упомянул о своем предпочтительном методе работы со стеками:

Я всегда использую модуль Queue. Он поддерживает структуры данных FIFO и LIFO и является потокобезопасным.

Подробнее см. документы. Он не реализует функцию isEmpty(), вместо этого возникает исключение Full или Empty, если невозможно выполнить push или pop.

Ответ 4

Стек следует за механизмом LIFO. Вы можете создать список и сделать обычный append(), чтобы добавить список элементов и сделать pop(), чтобы извлечь элемент из списка, который вы только что вставили.

Ответ 5

Вот пример класса стека

class Stack(object):

   def __init__(self):
      self.items = []

   def push(self, item):
      self.items.append(item)

   def pop(self):
       return self.items.pop()

   def peek(self):
       return self.items[-1]

   def isEmpty(self):
       return len(self.items) == 0

Ответ 6

    class Stack:
        def __init__(self):
            self.items=[]

        def isEmpty(self):
            return self.items==[]

        def push(self , item):
            self.items.append(item)

        def pop(self):
            return self.items.pop()

        def size(self):
            return len(self.items)

        def peek(self):
            return self.items[-1]

Создать стек

Для создания нового стека мы можем просто использовать Stack()

например:

     s=Stack()

"s" - это имя нового стека

пустой

Используя isEmpty() мы можем проверить, что наш стек пуст или нет

например:

у нас есть два стека с именем s1 = (0,1,4,5,6) и s2 =()

если мы используем print(s1.isEmpty()) он вернет False

если мы используем print(s2.isEmpty()) он вернет True

От себя

Используя операцию push, мы можем добавлять элементы в начало стека.

мы можем добавить "6" к имени стека "s", используя

    s.push(6)

поп

мы можем использовать операцию pop для удаления и возврата верхнего элемента стека

если есть имя стека "s" с n количеством элементов (n> 0), мы можем удалить его сверху большинства элементов, используя

    s.pop()

размер

Эта операция вернет сколько элементов в стеке

если есть имя стека "s" s = (1,2,3,4,5,3)

    print(s.size())

вернет "6"

peek Эта операция возвращает верхний элемент, не удаляя его

    print(s.peek())

"мы можем напечатать элементы стека, используя print(s.items) "

Ответ 7

class Stack:
    def __init__(self):
        self.stack = []
    def pop(self):
        if self.is_empty():
            return None
        else:
            return self.stack.pop()
    def push(self, d):
        return self.stack.append(d)
    def peek(self):
        if self.is_empty():
            return None
        else:
            return self.stack[-1]
    def size(self):
        return len(self.stack)
    def is_empty(self):
        return self.size() == 0