
ESTRUCTURA DE DATOS EN C
Serie Schaum
Ignacio Zahonero , Lucas García Sánchez , Luis Joyanes Aguilar y Matilde Fernández Azuela
Editorial: McGraw-Hill
Edición: 1
Fecha Publicación: 2005
ISBN: 9788448145125
ISBN ebook: 9788448173869
Páginas: 458
Grado: Universitario
Área: Informática
Sección: Lenguajes y Metodología de la Programación
Idioma: Español
Etiquetas: Descatalogado, Schaum
Tweet
✘ Descatalogado
Edición: 1
Fecha Publicación: 2005
ISBN: 9788448145125
ISBN ebook: 9788448173869
Páginas: 458
Grado: Universitario
Área: Informática
Sección: Lenguajes y Metodología de la Programación
Idioma: Español
Etiquetas: Descatalogado, Schaum
Tweet
✘ Descatalogado
Prólogo
1. Algoritmos, estructuras de datos y programas.
2. Análisis de algoritmos
3. Arrays, (listas y tablas) estructuras y uniones en C.
4. Recursividad
5. Algoritmos de búsqueda y ordenación.
6. Archivos y algoritmos de ordenación externa.
7. Tipos abstractos de datos y objetos.
8. Listas, listas enlazadas.
9. Modificaciones de listas enlazadas.
10. Pilas y sus aplicaciones.
11. Colas, colas de prioridad y montículos.
12. Tablas de dispersión y funciones hash.
13. Árboles, árboles binarios y árboles ordenados.
14. Árboles binarios equilibrados.
15. Árboles B.
16. Grafos I: Representación y operaciones
17. Grafos II: Algoritmos.
Índice analítico.
*La edición digital no incluye códigos de acceso a material adicional o programas mencionados en el libro.
Dos de las disciplinas clásicas en todas las carreras relacionadas con la Informática y las Ciencias de la Computación son Estructuras de Datos y Algoritmos, o bien una sola disciplina, si ambas se estudian integradas en Algoritmos y Estructuras de Datos. El estudio de estructuras de datos y de algoritmos es tan antiguo como el nacimiento de la programación y se ha convertido en estudio obligatorio en todos los currícula desde finales de los años sesenta y sobre todo en la década de los setenta cuando apareció el Lenguaje Pascal de la mano del profesor Niklaus Wirtz, y posteriormente en la década de los ochenta con la aparición de su obra –ya clásica – Algorithms and Data Structures en 1986. ¿Porqué C y no C++/Java o Visual Basic/C#? Muchas Facultades y Escuelas de Ingeniería, así como Institutos Tecnológicos, comienzan sus cursos de Estructuras de Datos con el soporte de C y muchas otras con el soporte de C++ o Java, fundamentalmente; de hecho, en nuestra propia universidad, en algunas asignaturas relacionadas con esta disciplina se aprende a diseñar y construir estructuras de datos utilizando C++ o Java. ¿Existe una solución ideal? Evidentemente, consideramos que no y cada una de ellas tiene sus ventajas y es la decisión del maestro y profesor quien debe elegir aquella que considera más recomendable para sus alumnos teniendo en cuenta el entorno y contexto donde se desarrolla su labor, al ser él quien llevará la dirección y responsabilidad de la formación de sus alumnos y pensará en su mejor futuro y encuadre dentro del currículo específico de su carrera. Sin embargo, hay muchas razones por las cuales pensamos que C es más apropiado que C++ o Java, para la introducción y formación a nivel medio, inclusive avanzado, en estructuras de datos, siempre que se recurra al paradigma estructurado, con soporte en tipos abstractos de datos y no al puro enfoque orientado a objetos en cuyo caso C++ o Java tienen, sin duda, todas las ventajas y sería necesario utilizar uno u otro lenguaje, y también como antes el profesor tendría siempre la última palabra. Una de estas razones es evidente y se deduce del propio nombre de los lenguajes. C++ es un C más es decir, un C más amplio y potente que se construyó para manejar complejidad a gran escala. Iguales razones, incluso aumentadas, se puede decir de Java, al ser un lenguaje más moderno, con mejores funcionalidades, orientado a la programación en Web… El primer problema que se suele presentar al estudiante de estructura de datos que, probablemente, procederá de un curso a nivel básico, medio o avanzado de introducción o fundamentos de programación o bien de iniciación de algoritmos, es precisamente el modo de afrontar información compleja desde el principio. Aunque es verdad que C++1 tiene muchas ventajas sobre C, muchas de estas ventajas no se hacen evidentes hasta que un programa se “vuelve” o “hace” más complejo y, si me apuran, más completo. En este caso el paradigma orientado a objetos (POO) es una herramienta de programación y organizativa muy poderosa y con grandes ventajas para la enseñanza y posterior tarea profesional. Por otra parte, la mayoría de los estudiantes de informática, ciencias de la computación, ingeniería de sistemas o de telecomunicaciones, requieren conocer bien el flujo C-C++ y viceversa. Por consiguiente, parece más natural enseñar primero las estructuras de datos en C y una vez conocidas y mejor dominadas las técnicas de diseño y construcción de estructuras de datos en C, y cuando se tenga constancia de que el alumno dispone de conocimientos, al menos, básicos de POO entonces intentar pasar a C++ o Java. Por otra parte, aunque a primera vista por su enfoque orientado a objetos, C++ podría ser más interesante, en el caso del análisis y diseño de algoritmos y estructuras de datos esta propiedad añade una complejidad inherente, ya que pensamos la idea conceptual de algoritmo encaja mejor en el paradigma estructurado, aunque luego la implementación en clases y objetos, puede darle una nueva potencialidad. Pensando en esta transición es la razón por la cual se ha incluido un capítulo dedicado a conceptos teórico-prácticos de orientación a objetos. En cualquier caso, el curso está soportando la comprensión del Tipo Abstracto de Datos (TAD) de modo que, aunque, se enseñan las estructuras de datos bajo la metodología estructurada, el estilo de programación empleado en el texto se basa en el estudio de tipos abstractos de datos como base para la formación en orientación a objetos. Además de estas ventajas, existen otras, que si bien se pueden considerar menores, no por ello menos importantes y son de gran incidencia en la formación en esta materia. Por ejemplo, algunas de las funciones de Entrada/Salida (tan importantes en programación) son más fáciles en C++ que en C (véase el caso de números enteros), otros tipos de datos tales como cadenas y números reales se pueden formatear más fácilmente en C. Otro factor importante para los principiantes es el conjunto de mensajes de error y advertencias proporcionadas por un compilador durante el desarrollo del programa Se estudian estructuras de datos con un objetivo fundamental: aprender a escribir programas más eficientes. También cabe aquí hacerse la pregunta ¿Por qué se necesitan programas más eficientes cuando las nuevas computadoras son más rápidas cada año (en el momento de escribir este prólogo, las frecuencias de trabajo de las computadoras personales domésticas son de 3 GHz o superiores, y las memorias centrales de 512 MB, son prácticamente usuales en la mayoría de los PC y claro está son el nivel de partida en profesionales). La razón tal vez resida en el hecho de que nuestras metas no se amplían a medida que se aumentan las características de las computadoras. La potencia de cálculo y las capacidades de almacenamiento aumentan la eficacia y ello conlleva un aumento de los resultados de las máquinas y de los programas desarrollados para ellas. La búsqueda de la eficiencia de un programa no debe chocar con un buen diseño y una codificación clara y legible. La creación de programas eficientes tiene poco que ver con “trucos de programación” sino al contrario se basan en una buena organización de la información y buenos algoritmos. Un programador que no domine los principios básicos de diseños claros y limpios probablemente no escribirá programas eficientes. A la inversa, programas claros requieren organizaciones de datos claras y algoritmos claros, precisos y transparentes. La mayoría de los departamentos informáticos reconocen que las destrezas de buena programación requieren un fuerte énfasis en los principios básicos de ingeniería de software. Por consiguiente, una vez que un programador ha aprendido los principios para diseñar e implementar programas claros y precisos, el paso siguiente es estudiar los efectos de las organizaciones de datos y los algoritmos en la eficiencia de un programa.
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática/Escuela Universitaria de Informática Universidad Pontificia de Salamanca. Campus Madrid
Lucas García Sánchez
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software Facultad de Informática, Escuela Universitaria de Informática Universidad Pontificia de Salamanca campus Madrid
Luis Joyanes Aguilar
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática/Escuela Universitaria de Informática Universidad Pontificia de Salamanca. Campus Madrid
Matilde Fernández Azuela
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software Facultad de Informática, Escuela Universitaria de Informática Universidad Pontificia de Salamanca campus Madrid