Поиск…


Вступление

Стек представляет собой контейнер объектов, которые вставляются и удаляются в соответствии с принципом последнего выхода (LIFO). В стеках сбрасывания разрешены только две операции: нажмите элемент в стек и вытащите элемент из стека . Стек представляет собой структуру данных с ограниченным доступом - элементы могут быть добавлены и удалены из стека только сверху . Вот структурное определение стека: стек либо пуст, либо состоит из вершины, а остальное - стека.

Синтаксис

  • stack = [] # Создать стек
  • stack.append (object) # Добавить объект в начало стека
  • stack.pop () -> object # Возвращает самый верхний объект из стека, а также удаляет его
  • list [-1] -> object # Заглянуть в самый верхний объект, не удаляя его

замечания

Из Википедии :

В информатике стек представляет собой абстрактный тип данных, который служит в качестве набора элементов с двумя основными операциями: push , который добавляет элемент в коллекцию и pop , который удаляет последний добавленный элемент, который еще не был удален.

В связи с тем , как их элементы , доступ, стеки также известны как Last-In, First-Out (LIFO) суммируется.

В Python можно использовать списки как стеки с append() как push и pop() качестве поп-операций. Обе операции выполняются в постоянное время O (1).

Структура данных deque Python также может использоваться как стек. По сравнению с списками, deque s позволяет выполнять операции push и pop с постоянной сложностью по времени с обоих концов.

Создание класса Stack с помощью объекта списка

Используя объект list вы можете создать полностью функциональный общий стек со вспомогательными методами, такими как просмотр и проверка, если стек пуст. Ознакомьтесь с официальными документами python для использования list как Stack здесь .

#define a stack class
class Stack:
    def __init__(self):
        self.items = []
    
    #method to check the stack is empty or not
    def isEmpty(self):
        return self.items == []
    
    #method for pushing an item 
    def push(self, item):
        self.items.append(item)

    #method for popping an item 
    def pop(self):
        return self.items.pop()
    
    #check what item is on top of the stack without removing it
    def peek(self):
        return self.items[-1]

    #method to get the size
    def size(self):
        return len(self.items)

    #to view the entire stack
    def fullStack(self):
        return self.items

Пример:

stack = Stack()
print('Current stack:', stack.fullStack())
print('Stack empty?:', stack.isEmpty())
print('Pushing integer 1')
stack.push(1)
print('Pushing string "Told you, I am generic stack!"')
stack.push('Told you, I am generic stack!')
print('Pushing integer 3')
stack.push(3)
print('Current stack:', stack.fullStack())
print('Popped item:', stack.pop())
print('Current stack:', stack.fullStack())
print('Stack empty?:', stack.isEmpty())

Выход:

Current stack: []
Stack empty?: True
Pushing integer 1
Pushing string "Told you, I am generic stack!"
Pushing integer 3
Current stack: [1, 'Told you, I am generic stack!', 3]
Popped item: 3
Current stack: [1, 'Told you, I am generic stack!']
Stack empty?: False

Параллельные партисы

Стеки часто используются для синтаксического анализа. Простая задача синтаксического анализа состоит в проверке соответствия строк круглых скобок.

Например, строка ([]) соответствует, потому что внешние и внутренние скобки образуют пары. ()<>) не соответствует, потому что последний ) не имеет партнера. ([)] также не соответствует, потому что пары должны быть либо полностью внутри, либо вне других пар.

def checkParenth(str):
    stack = Stack()
    pushChars, popChars = "<({[", ">)}]"
    for c in str:
        if c in pushChars:
            stack.push(c)
        elif c in popChars:
            if stack.isEmpty():
                return False
            else:
                stackTop = stack.pop()
                # Checks to see whether the opening bracket matches the closing one
                balancingBracket = pushChars[popChars.index(c)]
                if stackTop != balancingBracket:
                    return False
        else:
            return False

    return not stack.isEmpty()


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow