Buscar..


Introducción

Una pila es un contenedor de objetos que se insertan y eliminan de acuerdo con el principio de último en entrar, primero en salir (LIFO). En las pilas de pushdown solo se permiten dos operaciones: empujar el elemento en la pila y sacar el elemento de la pila . Una pila es una estructura de datos de acceso limitado: los elementos se pueden agregar y eliminar de la pila solo en la parte superior . Aquí hay una definición estructural de una pila: una pila está vacía o consiste en una parte superior y el resto que es una pila.

Sintaxis

  • stack = [] # Crea la pila
  • stack.append (objeto) # Agregar objeto a la parte superior de la pila
  • stack.pop () -> object # Devuelve el objeto más superior de la pila y también lo elimina
  • list [-1] -> object # Mira el objeto más superior sin quitarlo

Observaciones

De Wikipedia :

En informática, una pila es un tipo de datos abstracto que sirve como una colección de elementos, con dos operaciones principales: push , que agrega un elemento a la colección, y pop , que elimina el elemento agregado más reciente que aún no se eliminó.

Debido a la forma en que se accede a sus elementos, las pilas son también conocidos como último en entrar, primero en salir (LIFO) apila.

En Python se pueden usar listas como pilas con append() como push y pop() como operaciones emergentes. Ambas operaciones se ejecutan en tiempo constante O (1).

La estructura de datos deque de Python también se puede utilizar como una pila. En comparación con las listas, los deque permiten operaciones de inserción y pop con una complejidad de tiempo constante desde ambos extremos.

Creación de una clase de pila con un objeto de lista

Usando un objeto de list , puede crear una pila genérica completamente funcional con métodos auxiliares, como mirar y comprobar si la pila está vacía. Echa un vistazo a los documentos oficiales de Python para utilizar la list como Stack aquí .

#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 ejemplo de ejecución:

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

Salida:

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

Paréntesis de paréntesis

Las pilas se utilizan a menudo para el análisis. Una tarea de análisis simple es verificar si una cadena de paréntesis coincide.

Por ejemplo, la cadena ([]) coincide, porque los corchetes exterior e interior forman pares. ()<>) no coincide, porque el último ) no tiene pareja. ([)] tampoco coincide, porque los pares deben estar completamente dentro o fuera de otros pares.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow