Una forma fácil de aprender
Las estructuras de datos son importantes en el desarrollo de aplicaciones informáticas. Cuando se construyen los primeros programas, es decir, programas pequeños y sencillos, se piensa directamente en la escritura del código. Sin embargo, conforme los programas se hacen más largos y complejos, es necesario, poner atención a otros aspectos del software además de la codificación. Si se es un profesional del software, se requiere trabajar como parte de un equipo que desarrolla un sistema que contiene miles o incluso millones de líneas de código. En estos escenarios temas como la programación orientada a objetos, patrones de diseño, el proceso de desarrollo, buenas prácticas de programación, buenas prácticas de comunicación, ciclos de vida del software y, por supuesto, estructuras de datos adecuadas que manipulen los datos, cobran vital importancia. Las aplicaciones actuales son complejas y se escriben en capas, donde cada capa maneja un tipo de lógica específica. Los datos son una capa importante en cualquier aplicación, y su manipulación adecuada depende de las estructuras de datos que utilicemos. Este libro enseña de manera didáctica las estructuras de datos dinámicas lineales y no lineales: pilas, colas, listas, árboles y grafos. Se utiliza un pensamiento abstracto para estudiar cada estructura de datos, por ello se propone el TAD (Tipo Abstracto de Datos), su implementación y la resolución de problemas reales donde se pone en uso las estructuras de datos. El libro utiliza un paradigma orientado a objetos y ejemplos de implementaciones en lenguaje Java. Los algoritmos que manipulan dichas estructuras de datos también son tenidos en cuenta desde el punto de vista de la complejidad computacional. Por ello, en sus primeros capítulos se introduce en las técnicas básicas de análisis de algoritmos para calcular la eficiencia de los algoritmos. El libro contribuye a la formación de estudiantes de ingeniería de sistemas, ingeniería informática y profesionales afines, que se inician en el fascinante mundo de la construcción de aplicaciones orientadas a objetos de mayor complejidad.