A travs de esta tarea, pondrs en prctica el uso de Pilas y Fila conociendo a la librera STL, y comprobando de nuevo la abstraccin de datos y la independencia de niveles, al probar una implementacin realizada por ti mismo.
Para realizar esta tarea, te recomiendo que revises las presentaciones en powerpoint del curso relacionadas con Pilas y Filas. Tambin puedes consultar el captulo 6 de mi libro. Por otro lado, tendrs que hacer una breve investigacin de qu es STL y cmo se usan las pilas y filas que provee STL. Para esto apyate en Internet, en donde encontrars muchas referencias.
El programa de aplicacin que hars en esta tarea es simple y es el mismo ejemplo que se encuentra en las presentaciones del curso: El usuario del programa escribe una palabra/frase y el programa el indica si esta palabra/frase es PALNDROME o no. Para resolver este caso, debers usar una pila y una fila. En esta ocasin, si ocultaremos el nivel fsico de las pilas y las filas del programa de aplicacin utilizando libreras .h .
El programa de aplicacin ser el mismo para las siguientes 3 versiones del nivel fsico de pilas y filas: 1. Utiliza las pilas y filas de STL. Para esta implementacin, debers haber investigado previamente cul es la especificacin lgica de estas estructuras en STL y cules son los detalles de interfase que hay que considerar. 2. Utilizando un diseo idntico al de la especificacin lgica de las pilas y filas de STL, implementa ahora estas estructuras de datos considerando que sern representadas en un arreglo de 255 posiciones. En el caso de la pila, el fondo estar siempre en la ltima posicin del arreglo, y el apuntador tope deber apuntar al siguiente lugar disponible en el arreglo. Para la fila, utilizaremos una representacin ineficiente, pero vlida para practicar que consiste en que el frente siempre es la primera posicin del arreglo (no hay apuntador y se recorren los datos al sacar) y el final apunta al ltimo elemento aadido. Una vez implementadas las pilas y filas, prueba el mismo programa de aplicacin y deber de funcionar sin cambios con respecto a la versin anterior. 3. Utilizando el mismo diseo, se implementar a la fila siguiente la representacin de un arreglo circular y un lugar reservado. En la sesin de clase se darn detalles de esta implementacin. De igual forma, se probar el programa de aplicacin demostrando su independencia.
ENTREGABLES Y EVALUACIN Para la sesin del jueves 30 de enero TODOS debern llevar los puntos 1 y 2 ya implementados, funcionando o no, pero ser un momento para compartir y observar lo realizado. El punto 3 se deber realizar despus de esa sesin en base a las explicaciones que se den. El martes 4 de febrero se entregar en la sesin de clase el reporte completo de la tarea que deber incluir lo siguiente: 1. Breve explicacin del diseo lgico que provee STL para las pilas y las filas, indicando cules fueron las referencias consultadas en la investigacin de este tema. 2. Listado impreso del programa de aplicacin. 3. Listado impreso de la implementacin de la pila (punto 2). 4. Listados impresos de las implementaciones de la fila (versiones del punto 2 y 3). 5. Comentarios respecto al funcionamiento del programa con las diversas implementaciones del nivel fsico y aclarando si funcion o no el programa. Incluir algunas evidencias del funcionamiento a travs de la impresin de pantallas. 6. Breves comentarios respecto a las dificultades que tuviste en la tarea (si las hubo) y los aprendizajes que lograste. Menciona que calificacin consideras merecer en la tarea (autoevaluacin).
Para cualquier duda o situacin no explicada en este documento, consulta al profesor lo antes posible envindole un correo.
Eduardo Serna A01196007 Estructura de Datos
Tarea #2
La Standard Template Library (STL) es una libreria de software de C++ que provee cuatro componentes: algoritmos, contenedores, funciones e iteradores (patrones de diseo). Esta librera ya tiene implementadas las filas (queues) y las pilas (stacks), por lo que le otorgan al ingeniero de software versatilidad al momento de querer incorporar alguna de estas estructuras de datos. La clase Queue (fila) tiene 8 mtodos miembro, los cuales son los siguientes:
Fila Empty Entrada Fila a verificar Salida TRUE si el tamao es 0, FALSE si el tamao es mayor a 0 Precondicin Ninguna Postcondicin Ninguna
Size Entrada Fila a verificar Salida Nmero de elementos de la fila Precondicin Ninguna Postcondicin Ninguna
Front Entrada Fila a verificar Salida Referencia a valor prximo a sacar (elemento ms viejo en la fila) Precondicin La fila no est vaca Postcondicin Ninguna
Back Entrada Fila a verificar Salida Referencia a elemento ms nuevo en la fila (ltimo elemento introducido) Precondicin La fila no est vaca Postcondicin Ninguna
Push Entrada Fila a verificar y valor a meter en la fila Salida Ninguno Precondicin Ninguno Postcondicin La fila se actualiza, se pone el valor ingresado en el final de la fila (back)
Pop Entrada Fila a verificar Salida Ninguno Precondicin La fila no est vaca Postcondicin La fila se actualiza, se elimina el valor ubicado en el frente de la fila
Swap Entrada 2 filas Salida Ninguna Precondicin Las filas no estn vacas Postcondicin El contenido de la fila 2 se pasa a la fila 1 y viceversa.
La clase Stack (pila), en cambio, cuenta con 6 mtodos miembro:
Pila
Empty Entrada Pila a verificar Salida TRUE si el tamao es 0, FALSE si el tamao es mayor a 0 Precondicin Ninguna Postcondicin Ninguna
Size Entrada Pila a verificar Salida Nmero de elementos de la pila Precondicin Ninguna Postcondicin Ninguna
Top Entrada Pila a verificar Salida Valor ubicado en la cima de la pila Precondicin La pila no est vaca Postcondicin Ninguna
Push Entrada Pila a verificar y valor a meter en la pila Salida Ninguno Precondicin Ninguno Postcondicin La pila se actualiza, se pone el valor ingresado en la cima de la pila.
Pop Entrada Pila a verificar Salida Ninguna Precondicin La pila no est vaca Postcondicin La pila se actualiza, se elimina el valor ubicado en la cima de la pila. Swap Entrada 2 pilas Salida Ninguna Precondicin Las pilas no estn vacas Postcondicin El contenido de la pila 2 se pasa a la pila 1 y viceversa.
Programa de Aplciacin
#include <iostream> using namespace std; #include "queue.h" #include "stack.h"
int main() { stack <char> pila; queue<char> fila; char ch;
template <class T> T queue <T>::front() { return arr[(frente+1)%255]; }
template <class T> T queue <T>::back() { return arr[final]; }
Funcionamiento
El programa de aplicacin funcion sin problemas con las clases implementadas, y a continuacin se desmuestra esto:
Imagen 1.1.- Utilizando la implementacin 2 y 3, se introduce la frase palndrome anita lava la tina. Se muestra en pantalla que esta frase es un palndrome
Imagen 1.2.- Utilizando la implementacin 2 y 3, se introduce una frase que no es palndrome, y por lo tanto. esto se muestra en pantalla.
Ahora bien, usando las libreras de STL tampoco hubo problemas. A continuacin se anexan las capturas de pantalla que demuestran esto:
Imagen 1.4.-Utilizando la implementacin 1, se introduce la frase palndrome anita lava la tina, el programa de aplicacin reconoce esto.
Imagen 1.4.- Utilizando la implementacin 1, se introduce una frase que no es palndrome, y por lo tanto. esto se muestra en pantalla.
Comentarios Finales
Como comentario final, quisiera recalcar que no tuve ningn problema al momento de hacer el programa de aplicacin ni la implementacin de la fila. Sin embargo, con la pila tuve ligeros problemas debido a que estaba usando un mtodo algo ineficiente (llenar espacios vacos con un carcter), lo cual haca que fallara en varios casos (sobre todo cuando el tipo de dato cambiaba). Por lo tanto, opt cambiar toda la implementacin para mejorar esto, y en efecto, se logr. Por ltimo, en este trabajo me calificara con un 100 debido a que le dediqu bastante esfuerzo y dedicacin para poder entenderle.