Ricerca…


introduzione

Una pila è un contenitore di oggetti che vengono inseriti e rimossi secondo il principio LIFO (last-in first-out). Negli stack pushdown sono consentite solo due operazioni: spingere l'elemento nella pila e far uscire l'elemento dalla pila . Una pila è una struttura di dati ad accesso limitato: gli elementi possono essere aggiunti e rimossi dallo stack solo nella parte superiore . Ecco una definizione strutturale di una pila: una pila è vuota o è composta da una cima e il resto è una pila.

Sintassi

  • stack = [] # Crea lo stack
  • stack.append (oggetto) # Aggiungi oggetto all'inizio della pila
  • stack.pop () -> oggetto # Restituisce la maggior parte degli oggetti in cima allo stack e la rimuove anche
  • lista [-1] -> oggetto # Guarda l'oggetto più in alto senza rimuoverlo

Osservazioni

Da Wikipedia :

In informatica, uno stack è un tipo di dati astratto che funge da raccolta di elementi, con due operazioni principali: push , che aggiunge un elemento alla raccolta e pop , che rimuove l'ultimo elemento aggiunto che non è stato ancora rimosso.

A causa del modo in cui i loro elementi sono accessibili, le pile sono noti anche come Last-In, First-Out (LIFO) impila.

In Python si possono usare gli elenchi come stack con append() come push e pop() come operazioni pop. Entrambe le operazioni vengono eseguite in tempo costante O (1).

La struttura dati deque di Python può anche essere usata come una pila. Rispetto agli elenchi, i deque s consentono operazioni push e pop con una complessità temporale costante da entrambe le estremità.

Creazione di una classe di stack con un oggetto di elenco

Utilizzando un oggetto list è possibile creare uno stack generico completamente funzionale con metodi di supporto come sbirciare e verificare se lo stack è vuoto. Controlla i documenti Python ufficiali per l'utilizzo list come Stack qui .

#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

Un esempio di esecuzione:

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())

Produzione:

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

Analisi delle parentesi

Le pile vengono spesso utilizzate per l'analisi. Un semplice compito di analisi consiste nel verificare se una stringa di parentesi corrisponde.

Ad esempio, la stringa ([]) corrisponde, poiché le parentesi esterne e interne formano coppie. ()<>) non corrisponde, perché l'ultimo ) non ha un partner. ([)] non corrisponde, perché le coppie devono essere interamente all'interno o all'esterno di altre coppie.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow