3.2.1 ¿Qué es una pila?
Una pila es una estructura desarrollada para almacenar datos de una manera muy específica. Imagina una pila de monedas. No puedes poner una moneda en ningún otro lugar sino en la parte superior de la pila.
Del mismo modo, no puedes sacar una moneda de la pila desde ningún lugar que no sea la parte superior de la pila. Si deseas obtener la moneda que se encuentra en la parte inferior, debes eliminar todas las monedas de los niveles superiores.
El nombre alternativo para una pila (pero solo en la terminología de TI) es UEPS (LIFO son sus siglas en inglés).
Es una abreviatura para una descripción muy clara del comportamiento de la pila: Último en Entrar - Primero en Salir (Last In - First Out). La moneda que quedó en último lugar en la pila saldrá primero.. La moneda que llegó en último lugar a la pila se irá primero.
3.2.2 La pila: el enfoque procedimental
>>stack = []
Estamos listos para definir una función que coloca un valor en la pila. Aquí están las presuposiciones para ello:
- El nombre para la función es push.
- La función obtiene un parámetro (este es el valor que se debe colocar en la pila).
- La función no retorna nada.
- La función agrega el valor del parámetro al final de la pila.
Así es como lo hemos hecho, echa un vistazo:
>>def push(val):
>> stack.append(val)
Ahora es tiempo de que una función quite un valor de la pila. Así es como puedes hacerlo:
- El nombre de la función es pop.
- La función no obtiene ningún parámetro.
- La función devuelve el valor tomado de la pila.
- La función lee el valor de la parte superior de la pila y lo elimina.
La función esta aquí:
>>def pop():
>> val = stack[-1]
>> del stack[-1]
>> return val
Nota: la función no verifica si hay algún elemento en la pila.
Armemos todas las piezas juntas para poner la pila en movimiento. El programa completo empuja (push) tres números a la pila, los saca e imprime sus valores en pantalla. Puedes verlo en la ventana del editor.
>>stack = []
>>def push(val):
>> stack.append(val)
>>def pop():
>> val = stack[-1]
>> del stack[-1]
>> return val
>>push(3)
>>push(2)
>>push(1)
>>print(pop())
>>print(pop())
>>print(pop())
>>>
1
2
3
No hay comentarios.:
Publicar un comentario