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:
- 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 pilamy_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:
- 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 contrarioFalse
.- 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