Hola. En este video, hablaremos sobre un nuevo tipo de estructura de datos llamado "stack". Este nuevo tipo de datos puede ser llamado "stack" o "pila". Es un tipo de datos abstracto, lo que quiere decir que entrega un conjunto de operaciones pero puede ser implementado de diferentes maneras, por ejemplo, con una lista o una clase. Imaginarse un "stack" no es difÃcil. En la vida diaria, vemos o usamos pilas en muchas ocasiones. Aquà hay 3 ejemplos: unos papeles apilados, una torre de piedras y una montaña de galletas. Pensemos ahora de una forma práctica, ¿cómo es más probable que se hayan armado estas estructuras? Lo más probable es que el primer papel que pusimos, o la primera roca o la primera galleta, es la que en este momento está más abajo en la pila. Y si fuéramos a sacar un papel, una roca o una galleta, ¿cuál serÃa el elemento más fácil de sacar? SerÃa el último que pusimos, el que está al tope o lo más arriba de la pila. Eso es un "stack" o una pila; es una estructura de datos de tipo LIFO, es decir, "last in, first out", lo último que ingresó es lo primero que saldrá. Tiene operaciones "push", para agregar un elemento en el tope y "pop", para eliminar un elemento desde el tope. Acá vemos un ejemplo de la operación "push". Ya tenemos un "stack" de 4 elementos y estamos agregando un quinto elemento, el que está de color rojo. Ese quinto elemento quedará al tope del "stack", apilado sobre los 4 ya existentes. Cuando vamos a sacar un elemento, tenemos que recordar el principio LIFO, "last in, first out". El elemento que sacaremos será el último que agregamos, es decir, el que está al tope del "stack". La operación para obtener y eliminar el elemento al tope del "stack" se llama "pop". Lo explicaremos mediante un ejemplo más concreto. Acá tenemos un "stack" vacÃo, y a la izquierda, la lista de operaciones que haremos, en orden, tal como si fuera código. Es importante mencionar que lo que está a la izquierda no es código Python, es simplemente una lista de operaciones que queremos aplicarle el "stack", escritas en pseudocódigo. Primero haremos "push" de 34, lo que agregará el 34 al "stack". Luego, haremos "push" de 3, lo que agrega 3 al tope del "stack"; es decir, encima del 34. Luego, agregamos el 89 que, de nuevo, se agrega el tope del "stack". Ahora, al hacer "pop", lo que obtendremos es el último número que se agregó, es decir, el 89. Si volvemos a agregar números, por ejemplo, el 25 y el 15, estos se agregan al tope del "stack". Y, de nuevo, si sacamos un número, se saca el último que fue agregado. Los "stacks" tienen múltiples usos en la computación. Se usan, por ejemplo, para implementar los botones "Retroceder" y "Avanzar" o "Back" y "Forward" de los navegadores o "browsers" de Internet. También se usan para implementar las llamadas a funciones y, en particular, la recursión. Además, se usan para implementar los botones de "Deshacer", "Undo", y "Rehacer", "Redo" o "Repeat", en los programas donde estos comandos existen. Ahora, veremos cómo implementar "Undo" y "Redo" en un programa de edición de texto. AquÃ, primero escribiremos las palabras "hola" y "chao", cada una en una lÃnea. En el "stack 1", vamos guardando cada uno de los comandos que se van aplicando. Por lo tanto, se incorporan las instrucciones «Escribir "hola"» y «Escribir "chao"», y en la ventana de arriba vemos que se han escrito ambas palabras. Luego, elegimos agrandar la letra de "hola", por lo que la palabra "hola" aparece más grande arriba, y luego pintar "chao" de azul, con lo que vemos que la palabra "hola" está más grande y "chao" está azul. Ahora podemos deshacer algunos de los comandos, pero debemos recordar cuál comando deshicimos, por si lo queremos volver a aplicar más adelante. Por ejemplo, deshacemos el último comando y con eso hacemos "pop" del "stack 1", pero "push" al "stack 2". Ahora, también queremos deshacer el tamaño de la letra, por lo que, de nuevo, hacemos "pop" del "stack 1" y "push" del "stack 2". En este momento, tenemos en el "stack 1", los comandos que se han aplicado y en el "stack 2", los que hemos deshecho. Si nos arrepentimos de algo que deshicimos, entonces haremos "pop" del "stack 2" y "push" al "stack 1", devolviendo el último comando deshecho a los comandos aplicados. Para resumir, en esta clase conocimos una nueva estructura de datos secuencial, el "stack", que trabaja con los comandos "push" para agregar un elemento al tope del "stack" y "pop" para sacar un elemento también del tope del "stack". Esta estructura es usada para implementar varias funcionalidades, tales como la posibilidad de deshacer y rehacer comandos en algunos programas. Muchas gracias por su atención.