El objetivo de este libro es mostrar las principales estructuras de datos con G U base en el paradigma orientado a objetos. Se presenta cada una de las princi- A pales estructuras y la manera en la que se almacena y recupera la información. R El texto explica la lógica requerida para llevar a cabo las operaciones más D A importantes y muestra la implementación de estos algoritmos. Para la progra- T mación de algoritmos y ejemplos se utiliza el lenguaje de programación C++, I uno de los lenguajes orientados a objetos más conocidos y utilizados, tanto en el ámbito académico como a nivel profesional. El libro está orientado a todos aquellos que: • Quieran conocer y entender los principios de la programación orientada a objetos. • Necesiten saber cómo funcionan las estructuras de datos. • Deseen conocer y dominar la implementación de los principales algo- ritmos dedicados al manejo de las estructuras de datos. • Les interese aprender a usar las estructuras de datos en la solución de problemas y en la implementación de estas soluciones. En cada uno de los capítulos se explican los principales conceptos y se refuerzan con ejemplos que ayudan a su comprensión. Además, se incluyen programas, o las instrucciones requeridas, para mostrar la implementación de los algoritmos y las soluciones a los problemas de aplicación de las estructuras estudiadas. Para mayor información sobre este tema visite: www.pearsoneducacion.net/guardati Visítenos en: Silvia Guardati www.pearsoneducacion.net ESTRUCTURA DE DATOS ORIENTADA A OBJETOS Algoritmos con C++ ESTRUCTURA DE DATOS ORIENTADA A OBJETOS Algoritmos con C++ Silvia Guardati Buemo Instituto Tecnológico Autónomo de México REVISIÓN TÉCNICA: Fabiola Ocampo Botello Escuela Superior de Cómputo Instituto Politécnico Nacional José Luis García Cerpas Centro de Enseñanza Técnica Industrial, Jalisco Datos de catalogación bibliográfica GUARDATI BUEMO, SILVIA Estructura de datos orientada a objetos: Algoritmos con C++ (cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2) PEARSON EDUCACIÓN, México, 2007 ISBN: 978-970-26-0792-2 Área: Computación Formato: 18.5 × 23.5 cm Páginas: 584 Editor:Luis Miguel Cruz Castillo e-mail:[email protected] Editor de desarrollo:Bernardino Gutiérrez Hernández Supervisor de producción:Rodrigo Romero Villalobos PRIMERA EDICIÓN, 2007 D.R. ©2007 por Pearson Educación de México,S.A. de C.V. Atlacomulco 500-5 piso Industrial Atoto 53519,Naucalpan de Juárez,Edo. de México Cámara Nacional de la Industria Editorial Mexicana. Reg. Núm. 1031 Prentice Hall es una marca registrada de Pearson Educación de México,S.A. de C.V. Reservados todos los derechos. Ni la totalidad ni parte de esta publicación pueden reproducirse,registrarse o transmi- tirse,por un sistema de recuperación de información,en ninguna forma ni por ningún medio,sea electrónico,mecá- nico,fotoquímico,magnético o electroóptico,por fotocopia,grabación o cualquier otro,sin permiso previo por escrito del editor. El préstamo,alquiler o cualquier otra forma de cesión de uso de este ejemplar requerirá también la autorización del editor o de sus representantes. ISBN 10:970-26-0792-2 ISBN 13:978-970-26-0792-2 Impreso en México. Printed in Mexico. 1 2 3 4 5 6 7 8 9 0 - 10 09 08 07 C ONTENIDO Introducción xi Agradecimientos xv Capítulo 1 Introducción a la Programación Orientada a Objetos 1 1.1 Características de la POO ....................................................................2 1.2 Ventajas de la POO ............................................................................3 1.3 Tipos abstractos de datos ....................................................................4 1.4 Clases ..................................................................................................7 1.4.1 Clases abstractas y concretas ......................................................9 1.4.2 Definición de una clase en C++ ................................................10 1.4.3 Los métodos constructor y destructor ......................................17 1.4.4 Uso de constructores múltiples ..................................................18 Ejercicios ................................................................................................26 Capítulo 2 Herencia y amistad 35 2.1 Herencia simple ................................................................................36 2.2 Herencia múltiple ..............................................................................40 2.3 Herencia de niveles múltiples ..........................................................45 2.4 Herencia privada ................................................................................58 2.5 Clases amigas (friend) ....................................................................59 2.6 Métodos amigos ................................................................................63 2.7 Funciones amigas ..............................................................................65 Ejercicios ................................................................................................67 vi Contenido Capítulo 3 Sobrecarga, plantillas y polimorfismo 77 3.1 Sobrecarga ........................................................................................77 3.1.1 Sobrecarga de operadores ..........................................................78 3.1.2 Sobrecarga de funciones o métodos ..........................................82 3.2 Plantillas ............................................................................................87 3.2.1 Plantillas de funciones ..............................................................87 3.2.2 Plantillas de clases ....................................................................89 3.3 Polimorfismo ....................................................................................99 3.3.1 Funciones virtuales ....................................................................99 3.3.2 Clases abstractas ......................................................................107 Ejercicios ..............................................................................................111 Capítulo 4 Arreglos 115 4.1 Introducción ....................................................................................115 4.2 La clase Arreglo ..............................................................................117 4.3 Métodos de acceso y modificación a arreglos ..............................119 4.3.1 Lectura de arreglos ..................................................................119 4.3.2 Escritura de arreglos ................................................................121 4.3.3 Eliminación en arreglos ..........................................................122 4.3.4 Operaciones en arreglos desordenados ....................................123 4.3.5 Operaciones en arreglos ordenados ........................................131 4.4 Arreglos paralelos ............................................................................140 4.5 Arreglos de dos dimensiones ..........................................................149 4.6 Arreglos de objetos ..........................................................................160 4.7 Casos especiales de arreglos ..........................................................171 4.7.1 Matrices poco densas ..............................................................171 4.7.2 Matrices triangulares ..............................................................177 Ejercicios ..............................................................................................183 Capítulo 5 Pilas y colas 195 5.1 Introducción ....................................................................................195 5.2 Pilas ................................................................................................196 5.3 Colas ................................................................................................211 5.3.1 Colas circulares ........................................................................224 5.3.2 Colas dobles ............................................................................231 Ejercicios ..............................................................................................232 Capítulo 6 Listas 237 6.1 Introducción ....................................................................................237 6.2 Listas simplemente ligadas ..............................................................238 Contenido vii 6.2.1 Inserción de elementos en una lista ........................................241 6.2.2 Eliminación de elementos de una lista ..................................247 6.2.3 Implementación de pilas por medio de listas ..........................264 6.3 Listas circulares simplemente ligadas ............................................268 6.4 Listas doblemente ligadas ..............................................................269 6.4.1 Inserción en listas doblemente ligadas ....................................272 6.4.2 Eliminación en listas doblemente ligadas ..............................276 6.4.3 Búsqueda de elementos en listas doblemente ligadas ................................................................281 6.5 Listas circulares doblemente ligadas ..............................................293 6.6 Multilistas ........................................................................................293 Ejercicios ..............................................................................................304 Capítulo 7 Árboles 313 7.1 Introducción ....................................................................................313 7.2 Árboles binarios ............................................................................315 7.2.1 Operaciones en árboles binarios ..............................................319 7.2.2 Árboles binarios de búsqueda ..................................................329 7.3 Árboles balanceados ......................................................................345 7.4 Árboles-B ......................................................................................367 7.5 Árboles-B+ ......................................................................................381 Ejercicios ..............................................................................................388 Capítulo 8 Gráficas 393 8.1 Introducción ....................................................................................393 8.2 Gráficas dirigidas ............................................................................397 8.2.1 Representación de una digráfica ..............................................397 8.2.2 La clase digráfica......................................................................400 8.2.3 Recorrido de gráficas dirigidas ................................................402 8.2.4 Aplicación de gráficas dirigidas ..............................................417 8.3 Gráficas no dirigidas........................................................................421 8.3.1 Representación de una gráfica..................................................422 8.3.2 La clase gráficano dirigida....................................................423 8.3.3 Recorrido de gráficas no dirigidas............................................424 8.3.4 Aplicación de gráficas no dirigidas..........................................432 8.4 Búsqueda..........................................................................................436 8.4.1 Búsqueda en profundidad (Depth First)................................436 8.4.2 Búsqueda a lo ancho (Breadth First)....................................441 Ejercicios................................................................................................446 viii Contenido Capítulo 9 Ordenación 449 9.1 Introducción......................................................................................449 9.2 Ordenación interna ..........................................................................450 9.2.1 Métodos de ordenación por intercambio..................................452 9.2.2 Método de ordenación por selección........................................466 9.2.3 Método de ordenación por inserción........................................469 9.3 Ordenación externa ..........................................................................488 9.3.1 Mezcla directa..........................................................................489 9.3.2 Mezcla equilibrada....................................................................494 Ejercicios................................................................................................500 Capítulo 10 Búsqueda 505 10.1 Introducción....................................................................................505 10.2 Búsqueda interna............................................................................506 10.2.1 Búsqueda secuencial ..............................................................508 10.2.2 Búsqueda binaria....................................................................516 10.2.3 Búsqueda por transformación de claves (Hash) ....................519 10.2.4 Búsqueda secuencial en listas................................................548 10.2.5 Búsqueda en árboles ..............................................................555 10.2.6 Búsqueda en gráficas..............................................................555 10.3 Búsqueda externa............................................................................555 10.3.1 Búsqueda externa secuencial..................................................556 10.3.2 Búsqueda externa binaria........................................................559 Ejercicios................................................................................................561 Índice 565