Explore
Search
Sign In
Join
Explore
Search
Sign In
Estructuras de datos en C
LUIS JOYANES AGUILAR MATILDE FERNÁNDEZ AZUELA LUCAS SÁNCHEZ GARCÍA IGNACIO ZAHONERO MARTÍNEZ 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
MADRID • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • LISBOA • MÉXICO NUEVA YORK • PANAMÁ • SAN JUAN • SANTIAGO • SÃO PAULO AUCKLAND • HAMBURGO • LONDRES • MILÁN • MONTREAL • NUEVA DELHI • PARÍS SAN FRANCISCO • SIDNEY • SINGAPUR • ST. LOUIS • TOKIO • TORONTO
Join
Explore
Search
Sign In
La información contenida en este libro procede de una obra original entregada por los autores. No obstante, McGrawHill/Interamericana de España no garantiza la exactitud o perfección de la información publicada. Tampoco asume ningún tipo de garantía sobre los contenidos y las opiniones vertidas en dichos textos. Este trabajo se publica con el reconocimiento expreso de que se está proporcionando una información, pero no tratando de prestar ningún tipo de servicio profesional o técnico. Los procedimientos y la información que se presentan en este libro tienen sólo la intención de servir como guía general. McGraw-Hill ha solicitado los permisos oportunos para la r ealización y el desarrollo de esta obra.
Estructura de datos en C. Serie Schaum No está permitida la reproducción total o parcial de este libro, ni su tratamiento informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por registro u otros métodos, sin el permiso previo y por escrito de los titulares del Copyright.
McGraw-Hill/Interamericana de de España, S. A. U. DERECHOS RESERVADOS © 2005, respecto a la primera edición en español, por McGRAW-HILL/INTERAMERICANA DE ESPAÑA, S. A. U. Edificio Valrealty, 1ª planta Basauri, 17 28023 Aravaca (Madrid)
www.mcgraw-hill.es
[email protected] ISBN: 84-481-4512-7 Depósito legal: M. Editor: Carmelo Sánchez González Compuesto en CD-FORM, S.L. Impreso en IMPRESO EN ESPAÑA - PRINTED IN SPAIN
Join
Explore
Search
Sign In
Join
Contenido
Prólogo .............................................................................................................................................................................
XI
Capítulo 1 Algoritmos, estructura de datos y programas ......................................................................................... 1.1 Resolución de problemas de programación..................................................................................................... 1.2 Abstracción de datos ........................................................................................................................................ 1.3 Análisis de un problema................................................................................................................................... 1.4 Diseño de un programa .................................................................................................................................... 1.5 Implementación (codificación) de un programa .............................................................................................. 1.6 Verificación ...................................................................................................................................................... 1.6.1 Método básico de verificación formal................................................................................................... 1.6.2 descripción formal de tipos de datos ..................................................................................................... 1.6.3 el lenguaje de la lógica de primer orden................................................................................................ Problemas resueltos básicos.................................................................................................................................... Problemas resueltos avanzados ............................................................................................................................... Problemas propuestos..............................................................................................................................................
1 1 1 1 2 2 3 3 3 4 6 9 12
Capítulo 2 Análisis de algoritmos ................................................................................................................................ 2.1 Medida de la eficiencia de un algoritmo.......................................................................................................... 2.1.1 Evaluación de la memoria...................................................................................................................... 2.1.2 Evaluación del tiempo............................................................................................................................ 2.2 Notación O-GRANDE ..................................................................................................................................... 2.2.1 Descripción de tiempos de ejecución .................................................................................................... 2.2.2 Definición conceptual ............................................................................................................................ 2.2.3 Definición formal................................................................................................................................... 2.2.4 Propiedades de la notación O ................................................................................................................ 2.2.5 Complejidad de las distintas sentencias y programas en C ................................................................... 2.2.6 Funciones de complejidad de algoritmos más comúnmente consideradas................................................... 2.2.7 Tabla comparativa de las distintas funciones de complejidad más usuales .......................................... 2.2.8 Inconvenientes de la notación O-grande................................................................................................ Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
15 15 15 15 16 17 17 17 17 17 18 18 19 19 28 31
Capítulo 3 Arrays o arreglos(listas y tablas), estructuras y uniones en C .................................................................. 3.1 Array unidimensional....................................................................................................................................... 3.2 Array multidimensionales ................................................................................................................................ 3.3 Array como parámetros a funciones ................................................................................................................ 3.4 Estructuras ........................................................................................................................................................ 3.5 Uniones............................................................................................................................................................. 3.6 Enumeraciones ................................................................................................................................................. 3.7 Typedef .......................................................................................................................................................... Problemas resueltos................................................................................................................................................. Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
33 33 35 36 36 38 38 38 39 45 54
VI
Explore
Search
Sign In
Join CONTENIDO
Capítulo 4 Recursividad................................................................................................................................................ 4.1 Algoritmos recursivos ...................................................................................................................................... 4.2 Casos en los que debe evitarse el uso de la recursividad ................................................................................ 4.3 Recursividad directa e indirecta....................................................................................................................... 4.4 Métodos para la resolución de problemas que usan recursividad ............................................................ 4.4.1 Divide y vence ....................................................................................................................................... 4.4.2 Backtracking (retroceso) ........................................................................................................................ Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
57 57 58 59 60 60 60 62 64 94
Capítulo 5 Algoritmos de búsqueda y ordenación ..................................................................................................... 5.1 Búsqueda .......................................................................................................................................................... 5.1.1 Búsqueda lineal ...................................................................................................................................... 5.1.2 Búsqueda binaria.................................................................................................................................... 5.2 Clasificación interna......................................................................................................................................... 5.3 Ordenación por burbuja ................................................................................................................................... 5.4 Ordenación por selección................................................................................................................................. 5.5 Ordenación por inserción ................................................................................................................................. 5.7 Métodos de ordenación por urnas .................................................................................................................... 5.7.1 BinSort .................................................................................................................................................... 5.7.2 RadixSort ................................................................................................................................................ 5.8 Ordenación rápida (QuickSort) ........................................................................................................................ 5.9 Ordenación por mezcla .................................................................................................................................... 5.10 Clasificación por montículo ........................................................................................................................... Problemas básicos ................................................................................................................................................... Problemas de seguimiento ...................................................................................................................................... Algoritmos avanzados ............................................................................................................................................. Problemas propuestos..............................................................................................................................................
97 97 97 98 98 99 99 100 100 100 100 101 101 101 101 107 110 119
Capítulo 6 Archivos y algoritmos de ordenación externa ......................................................................................... 6.1 Archivos en C................................................................................................................................................... 6.2 Operaciones con archivos ................................................................................................................................ 6.3 Ordenación externa .......................................................................................................................................... 6.4 Ordenación por mezcla directa ........................................................................................................................ 6.5 Ordenación por mezcla natural ........................................................................................................................ 6.6 Método de la mezcla equilibrada múltiple....................................................................................................... 6.7 Método polifásico............................................................................................................................................. Problemas de seguimiento ...................................................................................................................................... Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
121 121 121 125 127 127 127 128 129 133 139 150
Capítulo 7 Tipos abstractos de datos y objetos........................................................................................................... 7.1 El papel de la abstracción ................................................................................................................................ 7.2 El tipo abstracto de datos ( TAD) ..................................................................................................................... 7.2.1 Especificaciones de tipos abstractos de datos........................................................................................ 7.2.2 Implementación de tipos abstractos de datos ........................................................................................ 7.3 Orientación a objetos ....................................................................................................................................... Problemas resueltos básicos.................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
151 151 151 152 153 153 154 159 170
Capítulo 8 Listas, listas enlazadas ................................................................................................................................ 8.1 Estructuras de datos dinámicas ........................................................................................................................
171 171
Explore
Search
Sign In
CONTENIDO
Join VII
8.2 Punteros (apuntadores) ..................................................................................................................................... 8.3 Variables dinámicas.......................................................................................................................................... 8.4 Tipos puntero predefinidos NULL y void ...................................................................................................... 8.5 Conceptos generales sobre listas...................................................................................................................... 8.6 Especificación del tipo abstracto de datos lista ............................................................................................... 8.7 Operaciones sobre listas enlazadas .................................................................................................................. 8.8 Especificación formal del tipo abstracto de datos lista ordenada ...................................................................... 8.9 Inserción y borrado de un elemento en lista enlazada simple ......................................................................... Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
171 172 172 173 174 174 175 175 176 183 193
Capítulo 9 Modificaciones de listas enlazadas ............................................................................................................ 9.1 Listas doblemente enlazadas ............................................................................................................................ 9.2 Inserción y borrado de un elemento en lista doblemente enlazada ................................................................. 9.3 Listas circulares simplemente enlazadas.......................................................................................................... 9.4 Listas circulares doblemente enlazadas ........................................................................................................... Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
195 195 196 197 199 199 207 219
Capítulo 10 Pilas y sus aplicaciones ............................................................................................................................. 10.1 El tipo abstracto de datos pila ........................................................................................................................ 10.2 Especificación del tipo abstracto de datos pila .............................................................................................. 10.3 Implementación mediante estructuras estáticas ............................................................................................. 10.4 Implementación mediante estructuras dinámicas .......................................................................................... 10.5 Transformación de expresiones aritméticas de notación infija a postfija...................................................... 10.6 Evaluación de expresiones aritméticas .......................................................................................................... 10.7 Eliminación de la recursividad....................................................................................................................... Problemas resueltos básicos.................................................................................................................................... Problemas resueltos avanzados ............................................................................................................................... Problemas propuestos..............................................................................................................................................
221 221 222 222 222 223 224 224 225 229 241
Capítulo 11 Colas, colas de prioridad y montículos................................................................................................... 11.1 Colas ............................................................................................................................................................... 11.2 Especificación formal..................................................................................................................................... 11.3 Implementación con variables dinámicas ...................................................................................................... 11.4 Colas circulares .............................................................................................................................................. 11.5 Bicolas ............................................................................................................................................................ 11.6 Especificación formal de TAD bicola sin restricciones................................................................................. 11.7 Colas de prioridad .......................................................................................................................................... 11.8 Especificación del tipo abstracto de datos “cola de prioridad” ..................................................................... 11.9 Montículos...................................................................................................................................................... Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
243 243 244 245 247 247 247 248 248 249 249 265 268
Capítulo 12 Tablas de dispersión y funciones hash .................................................................................................... 12.1 Tablas de dispersión ....................................................................................................................................... 12.2 Funciones de transformación de clave........................................................................................................... 12.3 Tratamiento de sinónimos .............................................................................................................................. Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
271 271 272 274 275 283 285
VIII
Explore
Search
Sign In
Join CONTENIDO
Capítulo 13 Árboles, árboles binarios y árboles ordenados...................................................................................... 13.1 Concepto de árbol ........................................................................................................................................... 13.2 Árbol binario ................................................................................................................................................... 13.2.1 Construcción de un árbol binario....................................................................................................... 13.2.2 Recorridos .......................................................................................................................................... 13.3 Árboles binarios de expresiones ................................................................................................................... 13.3.1 Construcción a partir de una expresión en notación convencional ................................................... 13.4 Árboles binarios de búsqueda ........................................................................................................................ Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
287 287 288 288 288 291 292 294 295 302 316
Capítulo 14 Árboles binarios equilibrados.................................................................................................................. 14.1. Árbol binario equilibrado, árboles AVL ....................................................................................................... 14.2. Inserción en árboles AVL ............................................................................................................................. 14.3. Rotaciones en la inserción ............................................................................................................................. 14.4. La eliminación (o borrado en árboles AVL)................................................................................................. 14.5. Rotaciones en la eliminación ........................................................................................................................ Problemas de seguimiento ...................................................................................................................................... Problemas básicos ................................................................................................................................................... Problemas avanzados .............................................................................................................................................. Problemas propuestos..............................................................................................................................................
319 319 320 321 323 324 325 333 340 343
Capítulo 15 Árboles B ................................................................................................................................................... 15.1 Árboles B ....................................................................................................................................................... 15.1.1 Búsqueda de una clave ....................................................................................................................... 15.1.2 Inserción de información.................................................................................................................... 15.1.3 Borrado físico de un registro.............................................................................................................. 15.2 Realización de un árbol B en memoria externa ............................................................................................. 15.3 Árboles B* ..................................................................................................................................................... 15.4 Árboles B+ ..................................................................................................................................................... Problemas de seguimiento ...................................................................................................................................... Problemas propuestos..............................................................................................................................................
345 345 346 347 348 349 350 350 352 367
Capítulo 16 Grafos I: representación y operaciones.................................................................................................. 16.1 Conceptos y definiciones ............................................................................................................................... 16.2 Representación de los grafos.......................................................................................................................... 16.3 Tipo Abstracto de Datos Grafo ...................................................................................................................... 16.4 Recorrido de un grafo .................................................................................................................................... 16.5 Componentes conexas .................................................................................................................................... 16.6 Componentes fuertemente conexas................................................................................................................ Problemas resueltos básicos.................................................................................................................................... Problemas resueltos básicos.................................................................................................................................... Problemas propuestos..............................................................................................................................................
369 369 370 371 371 372 373 374 389 394
Capítulo 17 Grafos II: Algoritmos ............................................................................................................................... 17.1 Ordenación topológica ................................................................................................................................... 17.2 Matriz de caminos: Algoritmo de Warshall ................................................................................................... 17.3 Problema de los caminos más cortos con un sólo origen: algoritmo de Dijkstra ......................................... 17.4 Problema de los caminos más cortos entre todos los pares de vertices: algoritmo de Floyd ....................... 17.5 Concepto de flujo. Algoritmo de Ford Fulkerson .......................................................................................... 17.6 Problema del arbol de expansión de coste mínimo ....................................................................................... 17.7 Algoritmo de Prim y algoritmo de Kruskal ................................................................................................... Problemas resueltos básicos.................................................................................................................................... Problemas básicos ...................................................................................................................................................
397 397 398 398 398 399 400 401 402 414