Stack - Pilas

Las pilas son una estructura de datos que sigue el principio de LIFO (Last In First Out). Esto significa que el último elemento que se añade a la pila es el primero en ser eliminado. En este módulo se implementa una pila con las siguientes operaciones:

Como usar la documentación

Para leer la guía de uso de la documentación, por favor diríjase a la sección Guía de documentación.

stack.py

new_stack()

Crea una nueva pila vacía.

Implementa una pila sobre alguna de las implementaciones de listas. Por ejemplo un array_list o una single_linked_list.

Implementación de la pila

La implementación de la pila se realiza sobre una linked_list. La pila se implementa como una lista enlazada simple, donde el último elemento de la lista es el tope de la pila.

Returns:

Una nueva pila vacía.

Return type:

stack

Example:
# App/logic.py
from DataStructures.Stack import stack as st

# Crear una nueva pila
stack = st.new_stack()

# En este ejemplo se crea una nueva pila vacía implementada sobre una linked list.
print(stack)
# Salida esperada: {'size': 0, 'first': None, 'last': None}
push(my_stack, element)

Añade el elemento element al tope de la pila my_stack.

Parameters:
  • my_stack (stack) – La pila a la que se le añadirá el elemento.

  • element (Any) – El elemento que se añadirá a la pila.

Returns:

La pila con el elemento añadido.

Return type:

stack

Example:
# App/logic.py
from DataStructures.Stack import stack as st

# Crear una nueva pila
stack = st.new_stack()
stack = st.push(stack, {'name': 'John', 'age': 25})
print(stack)
# Salida esperada:
# {'size': 1,
#  'first': {'info':{'name': 'John', 'age': 25}, 'next': None},
#  'last': {'info':{'name': 'John', 'age': 25}, 'next': None}
# }
Test Scenarios:
  • Agrega un elemento a la pila vacía: Se añade un elemento a una pila vacía.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    stack = st.push(stack, {'name': 'John', 'age': 25})
    print(stack)
    # Salida esperada:
    # {'size': 1,
    #  'first': {'info':{'name': 'John', 'age': 25}, 'next': None},
    #  'last': {'info':{'name': 'John', 'age': 25}, 'next': None}
    # }
    
  • Agrega un elemento a la pila con elementos: Se añade un elemento a una pila con elementos.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    stack = st.push(stack, {'name': 'John', 'age': 25})
    stack = st.push(stack, {'name': 'Jane', 'age': 30})
    print(stack)
    # Salida esperada:
    # {'size': 2,
    #  'first': {'info': {'name': 'John', 'age': 25}, 'next': {'info': {'name': 'Jane', 'age': 30}, 'next': None}},
    #  'last': {'info': {'name': 'Jane', 'age': 30}, 'next': None}
    # }
    
pop(my_stack)

Elimina y retorna el elemento en el tope de la pila my_stack no vacía.

Si la pila está vacía, se lanza un error: EmptyStructureError: stack is empty.

Importante

Para lanzar un error si la pila está vacía, puede utilizar el siguiente código:

raise Exception('EmptyStructureError: stack is empty')
Parameters:

my_stack (stack) – La pila de la que se eliminará el elemento.

Returns:

Elemento retirado de la pila.

Return type:

any

Example:
# App/logic.py
from DataStructures.Stack import stack as st

# Crear una nueva pila
stack = st.new_stack()
stack = st.push(stack, {'name': 'John', 'age': 25})
stack = st.push(stack, {'name': 'Jane', 'age': 30})
elemento = st.pop(stack)
print(elemento)
# Salida esperada: {'name': 'Jane', 'age': 30}
Test Scenarios:
  • Eliminar un elemento de la pila vacía: Se intenta eliminar un elemento de una pila vacía.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    print(st.pop(stack))
    # Salida esperada: EmptyStructureError: stack is empty
    
  • Eliminar un elemento de la pila con un solo elemento: Se elimina un elemento de una pila con un solo elemento.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    stack = st.push(stack, {'name': 'John', 'age': 25})
    elemento = st.pop(stack)
    print(elemento) # Salida esperada: {'name': 'John', 'age': 25}
    print(stack) # Salida esperada: {'size': 0, 'first': None, 'last': None}
    
  • Eliminar un elemento de la pila con varios elementos: Se elimina un elemento de una pila con varios elementos.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    stack = st.push(stack, {'name': 'John', 'age': 25})
    stack = st.push(stack, {'name': 'Jane', 'age': 30})
    elemento = st.pop(stack)
    print(elemento) # Salida esperada: {'name': 'Jane', 'age': 30}
    print(stack)
    # Salida esperada:
    # {'size': 1,
    #  'first': {'info': {'name': 'John', 'age': 25}, 'next': None},
    #  'last': {'info': {'name': 'John', 'age': 25}, 'next': None}
    # }
    
is_empty(my_stack)

Verifica si la pila my_stack está vacía.

Parameters:

my_stack (stack) – La pila a verificar.

Returns:

True si la pila está vacía, de lo contrario False.

Return type:

bool

Example:
# App/logic.py
from DataStructures.Stack import stack as st

# Crear una nueva pila
stack = st.new_stack()
print(st.is_empty(stack))
# Salida esperada: True
Test Scenarios:
  • Pila vacía: Se verifica si una pila vacía está vacía.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    print(st.is_empty(stack))
    # Salida esperada: True
    
  • Pila con elementos Se verifica si una pila con elementos está vacía.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    stack = st.push(stack, {'name': 'John', 'age': 25})
    print(st.is_empty(stack))
    # Salida esperada: False
    
top(my_stack)

Retorna sin eliminar el elemento en el tope de la pila my_stack.

Si la pila está vacía, se lanza un error: EmptyStructureError: stack is empty.

Importante

Para lanzar un error si la pila está vacía, puede utilizar el siguiente código:

raise Exception('EmptyStructureError: stack is empty')
Parameters:

my_stack (stack) – La pila de la que se retornará el elemento.

Returns:

Elemento en el tope de la pila.

Return type:

any

Example:
# App/logic.py
from DataStructures.Stack import stack as st

# Crear una nueva pila
stack = st.new_stack()
stack = st.push(stack, {'name': 'John', 'age': 25})
stack = st.push(stack, {'name': 'Jane', 'age': 30})
elemento = st.top(stack)
print(elemento) # Salida esperada: {'name': 'Jane', 'age': 30}
print(stack) # Salida esperada: {'size': 2, 'first': {'info': {'name': 'John', 'age': 25}, 'next': {'info': {'name': 'Jane', 'age': 30}, 'next': None}}, 'last': {'info': {'name': 'Jane', 'age': 30}, 'next': None}}
Test Scenarios:
  • Obtener el tope de la pila vacía: Se intenta obtener el tope de una pila vacía.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    print(st.top(stack))
    # Salida esperada: EmptyStructureError: stack is empty
    
  • Obtener el tope de la pila con un solo elemento: Se obtiene el tope de una pila con un solo elemento.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    stack = st.push(stack, {'name': 'John', 'age': 25})
    elemento = st.top(stack)
    print(elemento) # Salida esperada: {'name': 'John', 'age': 25}
    print(stack)
    # Salida esperada:
    # {'size': 1,
    #  'first': {'info': {'name': 'John', 'age': 25}, 'next': None},
    #  'last': {'info': {'name': 'John', 'age': 25}, 'next': None}
    # }
    
size(my_stack)

Retorna el número de elementos en la pila my_stack.

Parameters:

my_stack (stack) – La pila de la que se retornará el tamaño.

Returns:

Número de elementos en la pila.

Return type:

int

Example:
# App/logic.py
from DataStructures.Stack import stack as st

# Crear una nueva pila
stack = st.new_stack()
stack = st.push(stack, {'name': 'John', 'age': 25})
stack = st.push(stack, {'name': 'Jane', 'age': 30})
print(st.size(stack))
# Salida esperada: 2
Test Scenarios:
  • Pila vacía: Se obtiene el tamaño de una pila vacía.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    print(st.size(stack))
    # Salida esperada: 0
    
  • Pila con elementos: Se obtiene el tamaño de una pila con elementos.
    # App/logic.py
    from DataStructures.Stack import stack as st
    
    # Crear una nueva pila
    stack = st.new_stack()
    stack = st.push(stack, {'name': 'John', 'age': 25})
    stack = st.push(stack, {'name': 'Jane', 'age': 30})
    print(st.size(stack))
    # Salida esperada: 2