You are on page 1of 387
© Estructuras de datos en 7 . ane > ao ClO Java 7 Sea rca Ceea tie Rica Peat oe en at Cereus Dictate Narre oe eee cen Incas Nee ree ecw) enfoque actual, a través de la Perea eit) PIP cake eeeate tie eres ene Ruud OMT eect ea kG acto ee eee atic 1) Cee erie Re tt anmery Oca icc) Peataeecn eran Bee eee ceric variedad de ejemplos practicos, Pree tet ete an aca er eeu na Ete ees ace! Ponte our AOR eri ac) e Pee Cold MARK ALLEN WEISS (eerie nee BPAY. Caracteristicas Ce eu ered Cee ame rake ac) entidad, cuyo cédigo original Peer eit euler NE Rc) y revisado por un programador cael eae tes MEE) eer Mec enue e Ce Seca m rien amen ted Pearce eek AUC} (ue See a ecu PCS ie ue cca BeOS cae acs? al final de cada capitulo para Peg teu eid es eee ete set iy eee ee es cuces asec ae entre los distintos capitulos. Nea COMM ele Me Mae Runa Cur University. Se doctoré en Ciencias de la Computacién en la Universidad de eee ae en RR eeu eel om eee les PCE restated catch aru cect Peer ace mane iis ie kt Cuca R Ck Ol ie lenguajes estructurados mas modernos, que se ha materializado en diversos —__ Secrets ER Met erage RSet a eae kel) ER hee Ce ie eit ea eee ee Reem eee eee TSBN a4 035-4 9 il il bere ESO NN Secon A Contenido Prélogo | ce . _ . XIX Un enfoque novedoso. were: “: ns wae XX Prerrequisitos.... cone 2 — XX Java.. . ce 7 ce = ‘XXI Organizacién del libro: —e . a ee XXII Organizacién del libro por capitulos........ suanmeeewe XXII Dependencias entre capitulos . woe ce . XXIV Partes independientes xe - — 2 XXIV Fundamentos matemiaticos ae ane ws . XXV Organizacién del curso....... XXV Ejercicios ne XXVI Detalles pedadégice . XXVI Disponibilidad del cédigo.. eons XXVL Gufa del profesor 0 eonaitiniitss., SOMME Agradecimientos . XXVIT Prélogo a la edicién en espafiol...... a wees XXIX, PRIMERA PARTE Un recorrido por Java 1. Java bésico. 3 1.2. El primer programa 5 1.2.1. Comentarios 5 1.2.2. main a e 6 Le Salida por pantalla 6 1.3.1. Los tipos primitivos . 6 1.3.3, Declaracidn e inicializacin de tipos primitivos .... z 1.3.4. Entrada y salida por terminal 8 a 1.4. Operadores basicos... ‘ 8 1.4.1. Operadores de asignacién 8 1.4.2, Operadores aritméticos binarios 9 1.4.3. Operadores unarios. 10 14.4. Conversiones de tipo o 10 1.5, _Instrucciones condicionales.. 1.5.1. Operadores relacionales y de igualdad u 15.2, Operadores l6gicos ul 15.3. La instruccién i£ 12 15.4. La instruccién white 13 155. La instruccién for. Fete nes ae 1.56. La instruccién do... TERRES . 15 15.7. break y continue... . i 15 1.5.8. La instrucein switch Fe — 16 1.5.9. El operador condicional ce ee _ - 17 1.6. Métodos 18 1.6.1. Sobrecarga de los nombres de los métodos . . 18 1.6.2. Clases de almacenamiento o cnn Fipiaeean 19) Resumen...... ce 19 Elementos del juego sexepuaistie - croncares OO) Errores comunes...... ss ce . nnmmacieess Bl En Internet 2 Ejercicios. 2 Bibliografia.... 2 4 2. Referencias 25 2.1, Qué es una referencia?.... 25 2.2. Nociones bisicas sobre objetos y referencias. 1 2.2.1, El operador punto (.) 28 2.2.2. Declaracién de objeto: 28 2.2.3, Recogida de basura 29 2.24. El significado de =........ 29 2.2.5. Paso de parémetros . 30 2.2.6. El significado di 31 2.2.7. Sobrecarga de operadores para objetos 31 2.3. Cadenas de caracteres . ce 31 2.3.1. Conceptos bisicos de la manipulacién de Strings... 32 2.3.2. Concatenacién de cadenas 32 2.3.3. Comparando cadenas......... ‘ sts le 33 2.34. Otros métodos del tipo String... . gczateroeats! 38 2.3.5. Conversidn entre cadenas y tipos primitivos.............. cee BB 24. Vectores. . 34 24.1. Declaraci6n, asignacin y métodos. 4 2.4.2. Expansién dinémica de vectores 36 24.3. Vectores multidimensionales .... 3 sities cia? 37 2.4.4. Argumentos de la linea de comandos. r 39 2.5. Manejo de excepciones 39 2.5.1. Procesamiento de excepciones. 39 2. La cléusula finally... 2.5.3. Excepciones mas comunes 4, Las cléusulas throw y throws .. 2.6. Entrada y salida.. 26.1. Operaciones bisicas de E/S 2.6.2. El objeto StringTokenizer.... 2.6.3. Ficheros de acceso secuencial .. Resumen Elementos del juego Errores_comunes En Internet... Ejercicios z Referencias seimewsrenarnaense Objetos y clases SI 3.1, {Qué es la programacién orientada a objetos? si 3.2. Un ejemplo sencillo 33 3.3. Javadoc : 34 34, Métodos 37 3.4.1, Constructores " 37 3.4.2. Métodos modificadores y de acceso 37 34.3. Salida y toString... cece cecceesseceseteetesesesseeeseeees 58 344. equals... 58 3.4.5. Métodos static....... 59 3.46. main.. 60 3.5. Paquetes 60 3.5.1, La directiva import 60 3.5.2. La instrucci6n package 61 3.5.3. La variable de entorno CLASSPATH. nei 62 3.54, Reglas de visibifidad amistosa dentro de un paquete 63 5. Compilacién separada 64 3.6. Construcciones adicionales 64 3.6.1, La referencia this. 64 3.62. La abreviatura this para constructores. 65 3.6.3. El operador instanceof . ha 65 3.6.4. Atributos estaticos... i 65 3.6.5. Inicializadores. estéticos 66 Resumen 67 Elementos del juego 68 Errores_ comunes 69 En Internet... 69 Ejercicios 70 Bibliogratia 1 Retenclalsa2 gcncsarvras mere eee us B 4.1. (Qué es la herencia? 3 4.2. Sintaxis basica de Java...... . . ‘caendectbitin a 76 4.2.1, Realas de visibilidad Tec RETR lscaeaa eee 16 4.2.2. El constructor y super 4.2.3, Métodos y clases finales .... 4.2.4. Sobreescribiendo un método 4.2.5. Métodos y clases abstractos 4.3. Ejemplo: extensidn de la clase Figura...... 4.3.1. Disgresién: una introducci6n a ta ordenacién... 44. Herencia miltiple 45. El interfaz revere 4.5.1. Especificacién de una interfaz 4.5.2. Implementacién de una interfaz 4.5.3. Varios inferfaces....... 4.6. Implementacién de componentes genéricas. Resumen... Seance ei Elementos del juego..... vee Errores_ comunes En Internet Ejercicios......, Bibliografia.... SEGUNDA PARTE Algoritmos y fundamentos de programacién Analisis de algoritmos 5.1. {Qué es el andlisis de algoritmos? 5.2. Ejemplos de tiempo de ejecucién de algoritmos 5.3. El problema de la subsecuencia de suma maxima 5.3.1. El algoritmo O(N‘) obvio 5.3.2. Un algoritmo mejorado O( 5.33. Un algoritmo lineal 54, Reglas generales para la notacién O 5.5. Logaritmos 5.6. Problema de la bisqueda estética 5.6.1, Buisqueda secuencial 5.6.2, Baisqueda binaria 5.6.3, Buisqueda interpolada... 5.7. Comprobar el andlisis de un algoritmo cis 5.8. Limitaciones del andlisis 0 eae zi Resumen - Elementos del juego......... on RoR 7 Errores comunes. En Internet Ejercicios. Bibliografia Estructuras de datos 6.1. {Por qué necesitamos estructuras de datos? . 6.2. Las pilas 6.2.1. Las pilas y los lenguajes de programacién... 7. 8. 63. Las colas . 6.4. Listas enlazadas 6.5. Arboles generales sepazn 6.6. Arboles binarios de biisqueda........ 6.7. Tablas hash 6.8. Colas de prioridad Resumen... spat SEEREBIRES . Elementos del juego... Errores_ comunes pounce Eli INCRE cercecearversvexsnananaeta Ejercicios Bibliografia Recursion...... eens ensisSSRTEHER TA. (Qué es la recursién?. 7.2. Fundamentos: demostraciones por indu 7.3. Recursién basica oe . 73.1, Impresién de ntimeros en cualquier base we 7.3.2. (Por qué funciona? .........606+ 7 7.3.3. Cémo funciona na 7.34. Demasiada recursi6n puede ser pairs 8 7.3.5. Ejemplos adicionales 74. Aplicaciones numéricas 74.1. Aritmética modular... 7.4.2. Exponenciacin modular : 7.4.3, Maximo comiin divisor ¢ inversos multiplicativos . 7.4.4. Bl sistema de criptografia RSA 7.5. Algoritmos divide y vencerds 7.5.1. El problema de la subsecuencia de suma méxima... 7.5.2. Anilisis de un algoritmo divide y vencerés sencillo 1 Uina cota superior general para los tiempos de ejecucidn de fos algoritmos di- vide y venceris 7.6. Programacién dinémica 7.1. Algoritmos de vuelta atris Resumen Elementos del juego Errores. comunes En Internet Ejercicios. : Bibliograffa Algoritmos de ordenacién 8.1. {Por qué es importante la ordenacién? 8.2. Preliminares. 83. Andlisis de la ordenaci6n por insercin y otras ordenaciones simples. 8.4, Shellsort.. 8.4.1. Rendimiento de Shellson 165 165 166 170 170 172 174 175 176 180 181 181 183 185 188 188 190 195 197 201 205 205 206 207 207 2u 213 213 215 215 217 219 10. 8.5. Mergesort 8.5.1. Mezela lineal de vectores ordenados.. 8.5.2. El algoritmo mergesort 8.6. Quicksort 5 8.6.1. El algoritmo quicksort 8.6.2. Andlisis de quicksort.. 8.6.3. Seleccionando el pivote. 8.6.4. Estrategia de particién 8.6.5. Elements iguales al pivote 8.6.6. Particién con Ia mediana de tres 8.6.7. Vectotes _pequefios... 8.6.8. Rutina de quicksort en Java 8.7. Seleccién répida..... 88. Una cola inferior para la ordenacién Resumen... Elementos del juego... Errores comunes. sesame — En Internet ea — = . Ejercicios.... Bibliografia Nameros aleatorios 249, 9.1. {Por qué son necesarios los ntimeros aleatorios? . coe 249 9.2. Generadores de niimeros aleatorios 2 9.3. Niimeros aleatorios no uniformes....... 9.4. Generacién de una permutaci6n aleatoria 9.5. Algoritmos aleatorios... i oman 9.6. Test aleatorio de primalidad. Resumen - Elementos del juego. Errores comunes En Internet... Ejercicios Bibliografia.... TERCERA PARTE Aplicaciones Juegos y diversién 23 10.1. Sopas de letras a : foe 2B 10.1.1. Teorfa.. . womens 10TH 10.1.2. Implementacién en Java oxragy, 276 10.2. El juego de las tres en raya 281 10.2.1. Poda alfa-beta. ... 281 10.2.2, Tablas de transposicién 282 10.3. El ajedrez 285 Resumen . 287 Elementos del juego 287 12. 13. Errores comunes.. En Internet . Ejercicios Bibliografia Las pilas y los compiladores ............2.....202- 11.1, Anatizador de simbolos equilibrados 11.1.1, El algoritmo basico 11.1.2. Implementacién 11.2. Una calculadora sencilla 11.2.1, Méquinas postfijas 11.2.2. Conversién de notacién infija a posttija 11.2.3, Implementacién 11.2.4, Arboles sintécticos de expresiones.. Resumen... Elementos del juego Enrorescomunes. vo En Internet... ee Ejercicios Bibliografia. . Utilidades . 12.1, Compresién de ficheros 12.1.1. Cédigos sin prefijos. 12.1.2. Algoritmo de Huffman... 12.1.3. La fase de codificaci6n.. 12.1.4, La fase de decodificacién 12.1.5. Consideraciones précticas 12.2. Generador de referencias cruzadas. 12.2.1, Tdeas bisicas .... 122.2. Implementacién en Java Resumen... Elementos del juego Errorescomunes. En Internet Ejercicios Bibliograffa.... Simulacién 13.1. El problema Josephus 13.1.1. La soluci6n simple....... 13.1.2. Un algoritmo mis eficiente 13.2. Simulacién dirigida por eventos. 13.2.1. Ideas basicas 13.2.2. Bernt: simulacién de un banco de médems . Resumen Elementos del juego - 15. 16. Errores comunes. En Internet Ejercicios.. Grafos y caminos 14.1. Defin : 14.1.1. Representacin 14.2. Problema del camino minimo sin pesos. 142.1. Teorfa 14.2.2. Implementacién en Java. 14.3. Problema de los caminos minimos con pesos positivos. 143.1, Teorfa: algoritmo de Dijkstra...... 143.2. Implementaci6n en Java 3 te 14.4. Problema del camino minimo con costes negativos...- 14.4.1. Teorfa 144.2. Implementacién en Java 14.5. Problemas de caminos en grafos aci 14.5.1, Ordenaci6n topoldgica . I Teoria del algoritmo de caminos minimos con un grafo acielico 14.5.3. Implementaci6n en Java 1454. Una uplicacién: anilisis de caminos eriticos.. Resumen... Elementos del juego. Errores comunes..... En Internet...... Ejercicios . fe [BIB grat en-aumneawsicsanicurceveri Seen, (CUARTA PARTE Implementaciones Plas y COO ie recrssnsanenemsconens soanttnizialc ceceeeee 395 15.1. Implementacién dinémica de vectores .. 15.1. Pilas . 15.1.2. Colas 15.2. Implementaciones con listas enlazadas 15.2.1. Pilas 15.2.2. Colas 153. Comparacién de los dos métodos. 15.4, Colas dobles Resumen “ Elementos del juego. Errores comunes 412 En Internet a 413 Ejercicios..... nn 13 Listas enlazadas 4s 16.1. Ideas basicas..... 4s 6.1.1. Nodos cabecera.. ' . 417 7. 18. 16.2. 16.3. 164. 16.1.2, Implementacién en Java... Listas doblemente enlazadas y listas enlazdas circulares. Listas enlazadas ordenadas Resumen Elementos del juego... Errores comunes En Internet.....- Ejercicios Clases iteradoras generales.... Definiciones Implementacién . Una aplicacié: binarios. y recursi6n Recorrido de arboles: clases iteradoras .. Arboles... 17.1, Arboles 11d 171.2. 17.13. 17.2. Arboles 17.3. Arboles 174, 174.1 17.4.2. 17.43. 1744. Resumen Elementos del juego Errores. comunes En Internet Ejercicios... Recorrido en postorden - Recorrido en orden simétrico Recorrido en preorden....... Recorrido por niveles Arboles binarios de busqueda 18.1 18.2. 18.3, 184. 18.5. 18.6. Ideas bisicas..... 18.1.1 18.1.2. Baisqueda por posicis 18.2.1 Analisis de las operaciones de los arbotes binarios de basqueda Las operaciones. Implementacién en Java. n en el orden. Implementacién en Java. Arboles AVL 18.4.1. Propiedades 18.4.2. Rotacién simple 18.4.3. Rotacién doble 18.4.4. Resumen de la insereién enun frbol AVL Arboles. rojinegros 18.5.1, Insercién ascendente . 18.5.2. Arboles rojinegros descendentes 18.5.3. Implementaci6n en Java... 18.5.4. Eliminacién descendente AA-Arboles .. 18.6.1. Insercién 18.6.2. Eliminacién 418 419 426 428 430 431 431 431 432 435 435 435 437 437 441 448. 450 453 457 458 459 461 461 462 462 463 467 467 468 470 477 477 481 484 485 487 490 492 493 495 497 503 505 506 509 19. 20. 18.6.3. Implementacién en Java.........cccececeeeeeee 509 18.7. B-Arboles “. 2 walt L 512 Resumen 7 : 519 Elementos del “juego . . La . eee 520 Errores comunes .. 521 En Internet . eee sees wai 521 Ejercicios — a sine S22 Bibliogratia 524 Tablas hash... 19.1. Ideas basicas 19.2. Funcién de localizacién. 19.3. Exploracién lineal 19.3.1. Anilisis de la exploraci6n lineal .. 19.3.2. Lo que sucede realmente: la agrupacién primaria 19.3.3. Analisis de la operacién buscar 19.4. Exploracién cuadratica 19.4.1. Implementacién en Java... 19.4.2. Anilisis de In exploracién cuadrética 19.5. Hashing enlazado Resumen Elementos del juego... Errores comunes.. En Internet Ejercicios.. Bibliogratta Una cola de prioridad: el monticulo 553 20.1. Ideas basieas 553 20.1.1. Propiedad estructural st 554, 20.1.2. Propiedad de ordenacién de los monticulos. 555 20.1.3. Operaciones permitidas. ‘ 556 20.2. Implementacién de las operaciones baSiCaS............2.00 = srs 559 20.2.1, insertar . 559 20.2.2. eliminarMin = 562 203, arregLartonticulo: construccién en tiempo lineal del monticulo S64 20.4. Operaciones avanzadas: reducirClave y mezclar. nse 568 20.5. Ordenacién interna: método del monticulo . - 568 20.6. Ordenacién externa... - tease sil 20.6.1. Por qué necesitamos nuevos algoritmos 2.0.2... asda 572 20.6.2. Modelo de ordenacién externa... : - 52 20.6.3, El algoritmo sencillo.. 572 20.64. Mercla multiaria arenes cols nates STE 20.6.5. Mezcla multifase exdtcticdadst ex OS 20.6.6. Selecci6n del reemplazo............. Bid oo . 516 Resumen... cece ceceeeee coe . TEN AM STS Elementos del juego. . eats ee 578 Errores comunes BBs 579 21. 22. 23. En Internet Ejercicios vies 3 < Bibliografia. .. . Tas QUINTA PARTE Estructuras de datos avanzadas Arboles de ensanchamiento...... aa cosas weaned 21.1. Auto-ajustamiento y anélisis amortizado . 21.1.1. Cotas de tiempo amortizadas 311.2 Una estrategia simple de auto-ajustamiento (que no funciona) 21.2. Arboles bisicos de ensanchamiento ascendente . 21.3. Operaciones basicas de los drboles de ensanchamiento........ i 21.4. Analisis del ensanchamiento ascendente .. 21.4.1. Demostracién de fa cota de ensanchamiento 21.5, Arboles de ensanchamiento descendent 21.6. Implementacién de los drboles con ensanchamiento descendente 2U7 Comparaciones de los arboles de ensanchamiento con otros drboles de bisqueda.. Resumen . Elementos del juego. Errores_comunes En Internet..........+ Ejercicios....... were Bibliografia. Colas de prioridad con mezcla.. 22.1. Los monticulos sesgados 22.1.1. La mezcla es importante 22.12, Mezcla simple de drboles con ordenacién de monticulos 22.1.3. El monticulo sesgado: una modificaci6n sencilla. 22.1.4. Analisis del monticulo sesgado... 22.2. Los monticulos de emparejamientos . 22.2.1. Operaciones del monticulo de emparejamientos y teoria. 22.2.2. Implementacién del monticulo de emparejamientos. 22.2.3. Aplicacion: el algoritmo de Dijkstra para la obtencién de caminos minimos. Resumen Elementos del juego Errores_ comunes En Internet... Ejercicios.. Bibliografia Estructura de particién 23.1. Relaciones de equivalencia .. 23.2. Equivalencia dinamicas y dos aplica 23.2.1. Aplicacién #1: arboles de recubrimiento minimo : 332.2, Aplicacién #2: el problema del antecesor comiin ms prOximo.- 579 580 583 587 587 588 589 591 593 594 597 613 613 613 614 615 616 618 618 620 626 629 629 630 630 630 631 633 633 634 635 637 V—— 233. El algoritmo de bisqueda répida.... 23.4, El algoritmo de unién répida 23.4.1. Algoritmos de unién inteligentes . 23.4.2. Compresién de caminos 23.5. Implementacién en Java. . Caso peor de la unién por rango y la compresién de caminos 23.6.1. Resumen Analisis del algoritmo unir/buscar. Elementos del juego Errores comunes. En Internet, Ejercicios.... Bibliografia APENDICES A. Plataformas para Java... A.l. Estableciendo el entorno. ALL Al2, Instrucciones para Unix Instrucciones para Windows95/NT..... A2. IDK de Sun A3. Entomos de desarrollo visual ABL. A32. B. Operadores... Symantec Café... Microsoft Visual J+ + CC. Algunas rutinas de librerias C.l. Clases del paquete java.lang CLI. Character C12. Integer. 5 C13. object C14. string C15. StringBuffer. C16. system C7. Thread. ‘ C18. Throwable C2. Clases del paquete java.io C.2.1, BufferedReader C22, File... C23. PileReader. C24. InputStreanReader C25. PushbackReader C3. Clases del paquete java.util C31. Random... C32. stringTokenizer C33. vector En Internet... 641 642 643 645 647 648 649 654 655 656 656 656 658 663 663 663 664 665 667 671 679 681 681 681 682 683 684 685 687 688 689 689 689 690 691 691 691 692 692 693 694 694 D. Interfaces gréficas de usuario. ... Dl. El Abstract Window Toolkit D2. Elementos bisicos del AWT D.2.1, Component D22. container D23. Ventanas de alto nivel.. D24. Panel D.25. Componentes importantes de la E/S. D3. Principios basicos del AWT 3.1. Configuraciones... D3.2. Grificos D3.3._ Eventos D34. Resumen: encajando las piezas. Da. Animaciones y hebras DS. Applets... D.S.1. Lenguaje de hipertexto D.5.2. Pardmetros.... D.53._Limitaciones de los applets : D.54. Conversién de una aplicacién en un applet. D.5.5. Applets con animacién.........+.260++ Resumen Elementos del juego Errores. comune: En Internet jer Bibliogratia Indice analitico. .. 695 695 696 697 697 698 700 701 705 705 708 10 13 713 715 716 719 719 720 722 724 724 126 21 728 730 7Bl Prdlogo ‘a versin original de este libro se disef6 para utilizarla en un curso de infor- mitica de dos semestres de duracién, comenzando por lo que se conoce ha- bitualmente como Estructuras de Datos. EI contenido de dicho curso ha ido evolucionando a lo largo del tiempo. Mien- tras que hay un cierto consenso general con respecto a los temas a cubrit, todavia hhay mucho desacucrdo en relacién con los detalles. Un tema uniformemente acep- tado lo constituyen los principios del desarrollo de software, y mas en concreto los ‘conceptos de encapsulaci6n y ocultamiento de la informacién. Todos los cursos de ‘estructuras de datos ticnden a incluir una introduccién al anélisis de! tiempo de @jecucién, Ia recursiGn, los algoritmos basicos de ordenacton y las estructuras de ‘datos elementales. En muchas universidades se ofrecen cursos avanzados que cu- tren a un nivel superior conceptos de estructuras de datos, algoritmos y ani del tiempo de ejecucién. El material de este libro se ha disefiado con la intencién de ser usado en cursos de ambos niveles, eliminando asf la necesidad de adquirir tun segundo libro de texto. ‘Aunque los debates mis enconados en este terreno se centran en torno a la cleccién del lenguaje de programacién mis apropiado, hay otras decisiones funda ‘mentales a tomar, incluyendo las siguientes: se debe 0 no introducir pronto el diseio orientado a objetos y/o el diseno basado en objetos + El nivel de rigor matemético que se va a mantener, + El equilibrio adecuado entre la implementacién de las estructuras de datos y su utilizaci6n, * Detalles de programaciGn relacionados con el lenguaje elegido (por ejemplo, silas GUI deberian usarse pronto 0 no). Mi objetivo a la hora de escribir este libro es proporcionar una introducciéa priictica a las estructuras de datos y los algoritmos desde el punto de vista del pen- ‘Samiento abstracto y la resoluciéa de problemas. Intento cubrir todos los detalles importantes concernientes a las estructuras de datos, st andlisis y sus implementa: ‘ciones en Java, aunque evitando aquellas estructuras que si bien son interesantes desde un punto de vista te6rico, no se utilizan con asiduidad. Es imposible cubrir din tan Cid Seti eee tepeaeaieetamer Gn tame: einihtenaees bi aed Sie tal, Cluyendo sus usos y andlisis. Por ello, he disefiado el libro para permit una cierta flexibilidad a los profesores a Ia hora de fijar su temarie, Cada profesor tendré que decidir el equilibrio adecuado entre teoria y prictica, y clegit en consecuencia aquellos temas que mejor encajen en su asignatura, Como indico mis adelante en este prefacio, el texto esti organizado procurando minimizar las dependencias en: tte los distintos capitulos, Un enfoque novedoso EL libro adopta un enfogue novedoso separando la presemtacin de cada estructura de daios en su especificacign (a través de una intefaz Java) ¢ implementacin. Es- te enfoque proporciona varios beneficios, ene ellos la promocisn del pensamien to abstracto. Antes de conocer la implementaci6n se presenta la interfaz de la cla se, obligando asf al estudiante a pensar desde el principio sobre la funcionalidad y eficiencia potencial de las distintas estructuras de datos. Por ejemplo, los estudian: tes vern programas que usan las tablas hash cientos de pigines antes de imple- ‘mentarlas. Las interfaces de las estructuras de datos se describen en un sinico capt twlo de la Parte Il. En la Parte Il se describen también las téenicas bisicas de andlisis, la recursin y el problema de la ordenacidn, La Parte Ill contiene una co: leccivn de aplicaciones que usan las distinas estructuras de datos. La implementa- iG de las estructures bésieas no se estudia hasta la Parte IV, una ver. se han ust do dichas estructuras, Puesto que todo el cddigo que aparece en el libro esti disponible (véase Disponibilidad del eddigo en ta piigina XVI), los estudiantes, pueden diseiar proyectos de programacin de cierta envergadura bastante pronto, usando el software existente. Las herramientas de desarollo de software en todos tos lengusjes vienen junto eon grandes librerfas,y la mayor parte de las estructu Fas de datos interesantes formarin parte de estas librerfs mis tarde © mas terupra no. Preveo que en los cursos de estructuras de datos se produciri un eventual des- plazamiento del énfasis de la implementacién al uso, Muchos profesores preferiran un enfogue mis tradicional en el que cada es- tnuctura de datos se define primero, Inego se implementa y por tiltima se usa Puesto que no hay dependencias entre las partes Illy TV, se puede también ense: far Ficilmente siguiendo el metodo tradicional utilizando este libro, Prerrequisitos Los estudiantes que vayan a usar este libro deberfan tener previamente conoci rientos sobre algun lenguaje de programacion mosiular u orientado a objetos. Se suponen conocimientos sobre las earactrfsticas bsicas. incluyenda tipos primiti- vos, operadores, estructuras de control, funciones (métoxos) y entrad sada (pero ‘no necesariamente de vectores y clases). Los estudiantes que hayan asistido aun curso de Java pueden comenzar con el Capitulo 3 (0 quiz més adelante), Los estudiantes que heyan usado ous lengua jes deberian empezar con el Capitulo 1, Ellos también deberian usar los apéndices. autocontenido y normalmente se estudia en cursos superiores. ‘© Apéndices (Més Java): el material sobre GUI del Apéndice D puede estu: Giarse en cualquier momento tras ef Capitulo 4, segdn resulte conveniente, Fundamentos mateméticos He intentado mostrar los resultados con el rigor matemitico necesario para satisfa- cer las expectativas de aquellos cursos de Estructuras de Datos en los que se hace Enfasis en la teorfa, y para los cursos superiores, que incluyen més anilisis. Sin ‘embargo, este material se separa del texto principal presentindose en forma de teoremas separados y. en algunos casos, secciones separadas (0 subsecciones). De ‘este modo, puede prescindirse de élen los cursos en los que se decida no conceder tanta importancia a los resultados tedricos, En cualquier caso, no es necesario entender Ia demostracidin de un teorema pa- ra comprender el resultado en sf, Esta 5 otra muestra de la distincién entre una interfaz. (el enunciado de un teorema) y su implementacibn (su demostracion), Asi, parte del material inherenterente matemético, como ta SecciGn 7.4 (Aplica cciones numéricas de la recursi6n), puede evitarse sin que ello afecte a la compren- si6n del resto de cada capftulo, Organizacién del curso Un aspecto fundamental a la hora de ensefiar el contenido de este libro es decidir ‘emo emplear el material contenido en las Partes TI Hy TV. El material de la Par te Tha de ser explicado con detenimicnto, y el estudiamte deberfa realizar varios Programas que muestren cémo debe realizarse el disefio, la implementacién. la prueba de clases (incluyendo las genéricas), y quizés el disefio orientado a objetos ‘empleando herencia. El Capitulo 5 discute la notacién O. Un ejercicio adecuado para comprobar si el estudiante ta ha comprendido es hacerle escribir un pequeio programa, pidiéndole que compare su tiempo de ejecucién con los resultados obte hidos en os anilisistesricos. Dentro de Ia metodologia de separacidn entre especificacién ¢ implementa. idn, el concepto clave del Capitulo 6 es que diferentes estructuras de datos sopor tan distinios esquemas de acceso con eficiencias diferentes. Un posible ejercicio es pedir a los estudiantes que escriban una estructura de datos ineficiente, para probarla después con uno cualquiera de los casos de estudio (a exeepeidn del algo- ‘htmo tres en raya, que emplea recursién). Asi, los estudiantes podrian comparar su ‘ente con una rutina de libreriaeficiente (pueden conse- fip andnimo, tl y como se explicaré més tarde). Siguicndo este esquema, pueden probarse toxos los casos de estudio (silvo el juego de las tres en raya), estudiando el comportamiento de cada estructura de datos. De este modo, el estudiante pouria yer las distntas interfaces y su ulizacidn, pero no emo se im- ‘slamenten de Seana cficiaate, .Viendo:len.cosen de enta, Gorma incrementenns la

You might also like