EstructuraDatos

download EstructuraDatos

of 22

description

Estructura de datos

Transcript of EstructuraDatos

  • POLITEXT

    Xavier Franch Gutirrez

    Estructuras de datosEspecificacin, diseo e implementacin

    EDICIONS UPC

  • A mis padres, por todo lo que me han dadoA Cristina, por lo que nos espera juntos

    A Miguel Angel, presente en mis recuerdos

  • ndice

    Presentacin ...........................................................................................................11

    Prlogo ....................................................................................................................13

    Captulo 1 Especificacin de tipos abstractos de datos

    Presentacin...............................................................................................................191.1 Introduccin a los tipos abstractos de datos .........................................................191.2 Modelo de un tipo abstracto de datos..................................................................25

    1.2.1 Signaturas y trminos...............................................................................261.2.2 Modelos asociados a una signatura...........................................................291.2.3 Evaluacin de un trmino dentro de un lgebra .........................................321.2.4 Ecuaciones y especificaciones algebraicas................................................341.2.5 Modelo inicial de una especificacin..........................................................371.2.6 Otros modelos posibles ...........................................................................43

    1.3 Construccin sistemtica de especificaciones......................................................451.3.1 Introduccin al uso de especificaciones ....................................................451.3.2 Clasificacin de las operaciones de una especificacin...............................461.3.3 Mtodo general de construccin de especificaciones................................47

    1.4 Ecuaciones condicionales, smbolos auxiliares y errores.......................................481.4.1 Ecuaciones condicionales........................................................................481.4.2 Tipos y operaciones auxiliares ..................................................................501.4.3 Tratamiento de errores.............................................................................51

    1.5 Estudio de casos ...............................................................................................531.5.1 Especificacin de algunos tipos de datos clsicos......................................541.5.2 Especificacin de una tabla de smbolos ...................................................601.5.3 Especificacin de un sistema de reservas de vuelos ..................................63

    1.6 Estructuracin de especificaciones.....................................................................661.6.1 Uso de especificaciones ..........................................................................661.6.2 Ocultacin de smbolos............................................................................671.6.3 Renombramiento de smbolos..................................................................681.6.4 Parametrizacin e instanciacin ................................................................691.6.5 Combinacin de los mecanismos..............................................................75

    1.7 Ejecucin de especificaciones............................................................................761.7.1 La deduccin ecuacional..........................................................................771.7.2 La reescritura...........................................................................................78

    Ejercicios ....................................................................................................................80

    ndice 7__________________________________________________________________________________

  • Captulo 2 Implementacin de tipos abstractos de datos

    Presentacin...............................................................................................................892.1 El lenguaje de implementacin ...........................................................................89

    2.1.1 Representacin de tipos..........................................................................912.1.2 Sentencias..............................................................................................932.1.3 Funciones y acciones ..............................................................................952.1.4 Ejemplo: una implementacin para los conjuntos.......................................97

    2.2 Correccin de una implementacin .....................................................................982.3 Estudio de la eficiencia de las implementaciones................................................108

    2.3.1 Notaciones asintticas ...........................................................................1112.3.2 rdenes de magnitud ms habituales .....................................................1162.3.3 Anlisis asinttico de la eficiencia temporal ..............................................1182.3.4 Anlisis asinttico de la eficiencia espacial ...............................................121

    2.4 Conflicto entre eficiencia y modularidad.............................................................1242.4.1 Falta de funcionalidad en la signatura ......................................................1252.4.2 Tipos abstractos de datos recorribles ......................................................1282.4.3 Tipos abstractos de datos abiertos..........................................................136

    Ejercicios ..................................................................................................................148

    Captulo 3 Secuencias

    Presentacin.............................................................................................................1513.1 Pilas................................................................................................................151

    3.1.1 Especificacin.......................................................................................1533.1.2 Implementacin.....................................................................................154

    3.2 Colas...............................................................................................................1583.2.1 Especificacin.......................................................................................1583.2.2 Implementacin.....................................................................................159

    3.3 Listas ..............................................................................................................1623.3.1 Especificacin de las listas con punto de inters......................................1623.3.2 Implementacin de las listas con punto de inters....................................1663.3.3 Implementacin de estructuras de datos con punteros.............................1733.3.4 Transparencia de la representacin usando punteros ..............................1783.3.5 Implementaciones encadenadas y TAD abiertos ......................................186

    Ejercicios ..................................................................................................................189

    Captulo 4 rbolesPresentacin.............................................................................................................1954.1 Modelo y especificacin ...................................................................................196

    4.1.1 Modelo de rbol general.........................................................................1964.1.2 Modelo de rbol binario..........................................................................2014.1.3 Modelo de rbol con punto de inters.....................................................202

    8 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • 4.2 Implementacin ...............................................................................................2044.2.1 Implementacin de los rboles binarios ...................................................2044.2.2 Implementacin de los rboles generales................................................2134.2.3 Variaciones en los otros modelos de rboles............................................2184.2.4 Estudio de eficiencia espacial .................................................................218

    4.3 Recorridos.......................................................................................................2194.3.1 Recorridos en profundidad de los rboles binarios...................................2204.3.2 rboles binarios enhebrados..................................................................2244.3.3 Recorrido por niveles de los rboles binarios ...........................................228

    4.4 Colas prioritarias...............................................................................................2314.4.1 Implementacin por rboles parcialmente ordenados y casi completos......2334.4.2 Aplicacin: un algoritmo de ordenacin...................................................238

    Ejercicios ..................................................................................................................243

    Captulo 5 Tablas

    Presentacin.............................................................................................................2495.1 Especificacin .................................................................................................250

    5.1.1 Funciones totales..................................................................................2505.1.2 Conjuntos.............................................................................................2525.1.3 Tablas y conjuntos recorribles.................................................................252

    5.2 Implementacin ...............................................................................................2545.2.1 Implementacin por listas desordenadas.................................................2545.2.2 Implementacin por listas ordenadas.......................................................2555.2.3 Implementacin por vectores de acceso directo.......................................2575.2.4 Implementacin por tablas de dispersin.................................................258

    5.3 Funciones de dispersin..................................................................................2595.3.1 Funciones de traduccin de cadenas a enteros.......................................2605.3.2 Funciones de restriccin de un entero en un intervalo .............................2635.3.3 Funciones de traduccin de cadenas a enteros en un intervalo ................2655.3.4 Caracterizacin e implementacin de las funciones de dispersin.............266

    5.4 Organizaciones de las tablas de dispersin........................................................2705.4.1 Tablas de dispersin encadenadas .........................................................2705.4.2 Tablas de dispersin de direccionamiento abierto ....................................2785.4.3 Caracterizacin e implementacin de los mtodos de redispersin ...........2855.4.4 Variantes de las tablas de dispersin de direccionamiento abierto .............2885.4.5 Tablas dedispersin coalescentes ..........................................................2895.4.6 Evaluacin de las diferentes organizaciones............................................2915.4.7 Eleccin de una organizacin de dispersin............................................2925.4.8 Las organizaciones de dispersin en tablas recorribles y tablas abiertas.....2955.4.9 Inconvenientes de la dispersin .............................................................296

    5.5 rboles binarios de bsqueda ..........................................................................2975.6 rboles AVL ....................................................................................................303Ejercicios ..................................................................................................................315

    ndice 9__________________________________________________________________________________

  • Captulo 6 Relaciones binarias y grafos

    Presentacin.............................................................................................................3196.1 Relaciones binarias ..........................................................................................320

    6.1.1 Especificacin.......................................................................................3206.1.2 Implementacin.....................................................................................324

    6.2 Relaciones de equivalencia ..............................................................................3326.2.1 Implementaciones lineales .....................................................................3356.2.2 Implementacin arborescente ................................................................3406.2.3 Compresin de caminos.........................................................................342

    6.3 Grafos .............................................................................................................3466.3.1 Modelo y especificacin.........................................................................3486.3.2 Implementacin.....................................................................................352

    6.4 Recorridos de grafos........................................................................................3606.4.1 Recorrido en profundidad ......................................................................3616.4.2 Recorrido en anchura.............................................................................3646.4.3 Recorrido en ordenacin topolgica .......................................................365

    6.5 Bsqueda de caminos mnimos ........................................................................3696.5.1 Camino ms corto de un nodo al resto.....................................................3706.5.2 Camino ms corto entre todo par de nodos..............................................376

    6.6 rboles de expansin minimales.......................................................................3796.6.1 Algoritmo de Prim ..................................................................................3816.6.2 Algoritmo de Kruskal..............................................................................384

    Ejercicios ..................................................................................................................387

    Captulo 7 Uso y diseo de tipos abstractos de datos

    Presentacin.............................................................................................................3977.1 Uso de tipos abstractos de datos existentes ......................................................398

    7.1.1 Un evaluador de expresiones.................................................................3997.1.2 Un gestor de memoria dinmica ..............................................................4057.1.3 Un planificador de soluciones.................................................................412

    7.2 Diseo de nuevos tipos abstractos de datos......................................................4207.2.1 Una tabla de smbolos............................................................................4207.2.2 Una cola compartida...............................................................................4237.2.3 Una emisora de televisin.......................................................................430

    Ejercicios ..................................................................................................................439

    Bibliografa ............................................................................................................453

    ndice temtico .....................................................................................................455

    ndice de universos ..............................................................................................461

    1 0 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • Presentacin

    Cuando me piden que escriba el prlogo de un libro, me da un poco de vergenza, ya quese trata de una de mis asignaturas pendientes: he tenido hijos y he plantado rboles, ytambin he escrito muchas lneas, pero nunca un libro. As que hacer de prologuista sinhaber sido autor me provoca un cierto sentimiento de jubilacin anticipada. En este caso, noobstante, este sentimiento se confunde con una fuerte sensacin de orgullo y satisfaccin,provocada por el excelente trabajo de alguien que, en parte, me permito considerar discpulomo en el sentido ancestral de la palabra. Xavier Franch, autor de este libro, ha sido alumnomo durante sus estudios en la Facultat d'Informtica de Barcelona, colaborador becariomientras era estudiante, despus alumno de doctorado y compaero de departamento y,para terminar, siempre hemos trabajado juntos en proyectos de investigacin y he dirigido sutesis doctoral. Tengo motivos, pues, para sentir esta satisfaccin.

    El texto en cuestin, adems de actualizar el contenido de las materias ya clsicas deestructuras de datos, se adapta perfectamente al temario de una asignatura de los planes deestudio vigentes en la Facultat d'Informtica de Barcelona, lo cual justificara de por s suexistencia. Pero, adems, por su actualizacin del tema puede servir, total o parcialmente,para otros estudios de informtica o para cualquier asignatura sobre estructuras de datos deotros planes de estudios en la Universitat Politcnica de Catalunya o en otras universidades.Y, como valor aadido, es destacable la experiencia del autor en la docencia de la asignaturaEstructuras de Datos y Algoritmos, de los nuevos planes estudio vigentes en la Facultatd'Informtica de Barcelona.

    La notacin empleada tanto en las especificaciones como en las implementaciones de lasestructuras de datos es Merl, lenguaje emblemtico del proyecto Excalibur y notacin que,desde hace ya muchos aos, ha caracterizado las diversas enseanzas algortmicas ennuestra facultad.

    Por todo lo dicho es obvio que no soy nada imparcial a la hora de juzgar el trabajo del profesorXavier Franch, pero tambin tengo claro que la parcialidad es una pequea licencia que, enuna presentacin, nos podemos permitir.

    Presentacin 1 1__________________________________________________________________________________

  • Como ya he dicho, un excelente texto, que pone al da un tema clsico en informtica. Mienhorabuena al autor. Y tambin al lector, que encontrar una muestra de aquello que elprofesor Turski deca hace muchos aos: no hay nada ms prctico que una buena teora.Sobre todo si se explica desde un conocimiento slido de la prctica.

    Pere Botella i LpezCatedrtico del Departamento de Lenguajes y Sistemas Informticos (U.P.C.)

    Decano de la Facultat d'Informtica de Barcelona (U.P.C.)

    1 2 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • Prlogo

    El estudio de las estructuras de datos es casi tan antiguo como el nacimiento de laprogramacin, y se convirti en un tema capital en este mbito desde finales de la dcada delos 60. Como es lgico, una de las consecuencias de este estudio es la aparicin de unaserie de libros de gran inters sobre el tema, algunos de ellos ciertamente excelentes y quese han convertido en piedras angulares dentro de la ciencia de la programacin (citemos, porejemplo, los textos de D.E. Knuth; de A.V. Aho, J. Hopcroft y J.D. Ullman; de E. Horowitz yD. Sahni; de N. Wirth; y, recientemente, de T.H. Cormen, C.E. Leiserson i R.L. Rivest).

    Ahora bien, el progreso en el campo de la programacin ha dado como resultado la aparicinde nuevos conceptos, algunos de los cuales no se han consolidado hasta la segunda mitadde la dcada de los 80. Muchos de estos conceptos estn ntimamente interrelacionadoscon el mbito de las estructuras de datos, y sta es la razn por la cual los libros antes citadoshan quedado actualmente un poco desfasados en lo que respecta al mtodo de desarrollode programas que siguen, incluso en sus reediciones ms recientes.

    En este contexto, he confeccionado el libro "Estructuras de datos. Especificacin, diseo eimplementacin", que trata el estudio de las estructuras de datos dentro del marco de lostipos abstractos de datos. La adopcin de este enfoque se inscribe en una metodologa dedesarrollo modular de programas, que abunda en diferentes propiedades interesantes en laproduccin industrial de aplicaciones (correccin, mantenimiento, etc.), y permite enfatizardiversos aspectos importantes hoy en da: la necesidad de especificar el software, laseparacin entre la especificacin y la implementacin, la construccin de bibliotecas decomponentes, la reusabilidad del software, etc. Diversos autores han explorado estametodologa (sobre todo, desde las aportaciones de B. Liskov y J.V. Guttag), pero sinaplicarla en el contexto de las estructuras de datos.

    DestinatarioEl libro ha sido concebido sobre todo como un texto de ayuda para alumnos de unaasignatura tpica de estructura de datos en un primer ciclo de ingeniera en informtica;tambin se puede considerar adecuado para cualquier otra titulacin tcnica superior omedia con contenido informtico. A tal efecto, cubre el temario habitual de esta asignatura entono autoexplicativo, y se ilustra con numerosas figuras, especificaciones y programas.

    Prlogo 1 3__________________________________________________________________________________

  • Dependiendo de los objetivos de la asignatura, el formalismo asociado al estudio de estostemas puede ser ms o menos acusado; sea como sea, el libro puede usarse como textobsico de consulta.

    Ahora bien, los temas que aparecen en el libro se han desarrollado con ms profundidad quela estrictamente requerida por el alumno y, por ello, hay ms posibles destinatarios. Por unlado, el mismo profesor de la asignatura, porque puede encontrar en un nico volumen losaspectos de especificacin y de diseo que no acostumbran a aparecer en los libros deestructuras de datos; adems, la inclusin de especificaciones y de programas libera aldocente de la necesidad de detallarlos en sus clases. Por otro lado, cualquier informticoque quiera profundizar en el estudio de las estructuras de datos ms all de su aspectopuramente de programacin, puede encontrar aqu una primera referencia.

    ContenidoEn el primer captulo se introduce el concepto de tipo abstracto de datos. Despus deanalizar su repercusin en el diseo de programas, nos centramos en el estudio de suespecificacin formal, que es la descripcin exacta de su comportamiento. De entre lasdiferentes opciones existentes de especificacin formal, se sigue la llamada especificacinecuacional interpretada con semntica inicial. El captulo muestra un mtodo general paraconstruir especificaciones para los tipos, les otorga un significado matemtico (comolgebras heterogneas) y tambin estudia su estructuracin, y aqu destaca la posibilidad dedefinir tipos genricos, profusamente utilizados a lo largo del libro.

    En el segundo captulo se estudian diversos aspectos sobre la implementacin de los tiposde datos. El proceso de implementacin se lleva a cabo cuando existe una especificacinpara el tipo; la segunda seccin insiste precisamente en la relacin formal entre los dosconceptos, especificacin e implementacin. Tambin se introduce un punto clave en elanlisis de los algoritmos y las estructuras de datos que se desarrollarn posteriormente: elestudio de su eficiencia a travs de las denominadas notaciones asintticas. Por ltimo, semuestran algunas situaciones de la programacin con tipos abstractos de datos que puedencausar problemas de eficiencia, y se formulan algunos patrones de comportamiento parasolucionar estos problemas.

    Las diversas familias de estructuras de datos se introducen en los cuatro captulossiguientes: se estudian las secuencias; los rboles; las tablas y los conjuntos; y las relacionesbinarias y los grafos. Para todas ellas se sigue el mismo mtodo: descripcin informal,formulacin de un modelo, especificacin algebraica del tipo e implementaciones mshabituales. Por lo que se refiere a estas ltimas, se detalla la representacin del tipo y lacodificacin de las operaciones (hasta el ltimo detalle y buscando la mxima legibilidadposible mediante el uso de funciones auxiliares, diseo descendente, comentarios, etc.),siempre en el caso de implementacin en memoria interna; a continuacin, se estudia sueficiencia tanto temporal como espacial y se proponen varios ejercicios.

    1 4 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • Por ltimo, el captulo final muestra la integracin del concepto de tipo abstracto de datosdentro del desarrollo modular de programas, y lo hace bajo dos vertientes: el uso de los tiposabstractos previamente introducidos y el diseo de nuevos tipos de datos. El estudio sehace a partir de seis ejemplos escogidos cuidadosamente, que muestran la confrontacin delos criterios de modularidad y eficiencia en el diseo de programas.

    Para leer el texto, son necesarios unos conocimientos fundamentales en los campos de lasmatemticas, de la lgica y de la programacin. De las matemticas, los conceptos bsicos deconjunto, producto cartesiano, relacin, funcin y otros similares. De la lgica, el conceptode predicado, los operadores booleanos y las cuantificaciones universal y existencial. De laprogramacin, la habilidad de codificar usando un lenguaje imperativo cualquiera (Pascal, C,Ada o similares) que conlleva el conocimiento de los constructores de tipos de datos (tuplasy vectores), de las estructuras de control de flujo (asignaciones, secuencias, alternativas ybucles) y de los mecanismos de encapsulamiento de cdigo (acciones y funciones).

    Es importante destacar algunos puntos que el libro no trata, si bien por su temtica se podrahaber considerado la posibilidad de incluirlos. Primero, no aparecen algunas estructuras dedatos especialmente eficientes que, por su complejidad, superan el nivel de una asignaturade primer ciclo de ingeniera; por ejemplo, diversas variantes de montculos y de rboles debsqueda (Fibonnaci Heaps , Red-Black Trees, Splay Trees, etc.) y de dispersin (PerfectHashing, principalmente). Tambin se excluyen algunas otras estructuras que se aplicanprincipalmente a la memoria secundaria, como pueden ser las diversas variantes de rboles By tambin los esquemas de dispersin incremental (Extendible Hashing , Linear Hashing ,etc.). Tampoco se tratan en el libro algunos temas caractersticos de la programacin, comopueden ser el estudio de diversas familias de algoritmos (Greedy Algorithms, DynamicProgramming, etc.) de los cuales constan algunos casos particulares en el captulo de grafos;o como las tcnicas de derivacin y de verificacin formal de programas, si bien se usanalgunos elementos (invariantes de bucles, precondiciones y postcondiciones de funciones,etc.). Hay diversos libros de gran inters que s tratan en profundidad estos temas, cuyasreferencias aparecen convenientemente en este texto. Por ltimo, no se utilizan losconceptos propios de la programacin orientada a objetos (bsicamente, herencia yvinculacin dinmica) para estructurar los tipos de datos formando jerarquas; se ha preferidoel enfoque tradicional para simplificar el volmen de la obra y no vernos obligados a introducirla problemtica inherente a este paradigma de la programacin.

    BibliografaLas referencias bibliogrficas del libro se pueden dividir en dos grandes apartados. Por unlado se citan todos aquellos artculos que son de utilidad para temas muy concretos, cuyareferencia aparece integrada en el texto en el mismo lugar en que se aplican. Por el otro, haydiversos textos de inters general que cubren uno o ms captulos del libro y que aparecendentro del apartado de bibliografa; estos libros han de considerarse como los msdestacables en la confeccin de esta obra y no excluye que haya otros, igualmente buenos,

    Prlogo 1 5__________________________________________________________________________________

  • que no se citan, bien porque su temtica es muy similar a alguno de los que s aparecen, bienporque el desarrollo de los temas es diferente al que se sigue aqu.

    LenguajeEn cualquier texto sobre programacin, es fundamental la eleccin del lenguaje utilizadocomo vehculo para codificar (y, en este libro, tambin para especificar) los esquemas que seintroducen. En vez de especificar y programar usando algun lenguaje existente, he preferidoemplear la notacin Merl, diseada por diversos miembros del Departament de Llenguatgesi Sistemes Informtics (antiguamente, Departament de Programaci) de la UniversitatPolitcnica de Catalunya. Esta notacin ha sido utilizada desde principios de los aos 80 porlos profesores del departamento en la imparticin de las asignaturas de programacin de losprimeros niveles de las titulaciones en informtica y ha demostrado su validez comoherramienta para el aprendizaje de la programacin. Las razones de esta eleccin sonbsicamente dos: por un lado, disponer de una notacin abstracta que permita expresarfcilmente los diferentes esquemas que se introducen sin ningn tipo de restriccinimpuesta por el lenguaje; por otro, usar una sintaxis muy parecida tanto para especificar comopara implementar los tipos de datos (el hecho de que el mismo lenguaje se pueda usardesde estos dos niveles diferentes refuerza la relacin entre la especificacin y laimplementacin de los tipos de datos, que es uno de los objetivos del texto). Elinconveniente principal es la necesidad de traducir las especificaciones y los programas queaparecen en este texto a los lenguajes que el lector tenga a su disposicin; ahora bien, esteinconveniente no parece muy importante, dado que Merl es fcilmente traducible acualquier lenguaje comercial (a algunos mejor que a otros, eso s), y que podra haberaparecido el mismo problema fuera cual fuera el lenguaje de trabajo elegido.

    TerminologaDado que, hoy en da, el idioma dominante en el mbito de la informtica es el ingls, hehecho constar las acepciones inglesas junto a aquellos vocablos que denotan conceptosbsicos y universalmente aceptados; de esta manera, el lector puede relacionar rpidamenteestos conceptos dentro de su conocimiento de la materia o, en el caso de que sea el primerlibro que lee sobre estructuras de datos, adquirir el vocabulario bsico para la lecturaposterior de textos ingleses. Los trminos ingleses se escriben siempre en singularindependientemente del gnero con el que se usen en castellano.

    Por el mismo motivo, se utilizan de manera consciente varios anglicismos usuales en elmbito de la programacin para traducir algunos trminos ingleses. Dichos anglicismos selimitan a lo estrictamente imprescindible, pero he credo conveniente seguir la terminologatcnica habitual en vez de introducir vocablos ms correctos desde el punto de vistalingustico pero no tan profusamente usados.

    1 6 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • AgradecimientosEste libro es el resultado de una experiencia personal de varios aos de docencia en lasasignaturas de estructuras de datos en los planes de licenciatura e ingeniera de la Facultatd'Informtica de Barcelona de la Universitat Politcnica de Catalunya, por lo que refleja ungran nmero de comentarios y aportaciones de todos los profesores que, a lo largo de esteperodo, han sido compaeros de asignatura. Quizs el ejemplo ms paradigmtico sea lacoleccin de ejercicios propuestos en el texto, muchos de ellos provinentes de las listas deejercicios y exmenes de las asignaturas citadas. Para ellos mi ms sincero agradecimiento.En particular, quiero citar al profesor Ricardo Pea por su ayuda durante el primer ao queimpart la asignatura "Estructuras de la Informacin"; a los profesores y profesoras M.T. Abad,J.L. Balczar, J. Larrosa, J. Marco, C. Martnez, P. Meseguer, T. Moreno, P. Nivela, R.Nieuwenhuis y F. Orejas por la revisin de secciones, versiones preliminares y captulosenteros del texto y por la deteccin de errores; y, sobre todo, al profesor Xavier Burgus portodos los aos de continuos intercambios de opinin, sugerencias y crticas. A todos ellos,gracias.

    ContactoEl lector interesado puede contactar con el autor en la direccin [email protected], o bien dirigindose al departamento de Llenguatges i SistemesInformtics de la Universitat Politcnica de Catalunya. En especial, el autor agradecer lanotificacin de cualquier errata detectada en el texto, as como toda sugerencia o crtica a laobra. Tambin existe una pgina web con informacin sobre el libro, que se intenta manteneractualizada, cuya direccin es http://www-lsi.upc.es/~franch/publis/libro-eds.html.

    Barcelona, 10 de Junio de 1996 (primera edicin)12 de Noviembre de 2001 (ltima edicin)

    Prlogo 1 7__________________________________________________________________________________

  • Bibliografa

    [ADJ78] J.A. Goguen, J.W. Thatcher, E.G. Wagner. "An Initial Algebra Approach to theSpecification, Correctness and Implementation of Abstract Data Types". EnCurrent Trends in Programming Methodology, Vol. IV, Prentice Hall, 1978.

    [AHU83] A.V. Aho, J.E. Hopcroft, J.D. Ullman. Data Structures and Algorithms. Addison-Wesley, 1983.

    [Bal93] J.L. Balczar. Programacin Metdica. McGraw-Hill, 1993.[BrB97] G. Brassard, P. Bratley. Fundamentos de Algoritmia. Ed. Prentice Hall, 1997.[CLR90] T.H. Cormen, C.E. Leiserson, R.L. Rivest. Introduction to Algorithms. The MIT

    Press, 1990.[EhM85] H. Ehrig, B. Mahr. Fundamentals of Algebraic Specification , Vol. 1. EATCS

    Monographs on Theoretical Computer Science, Springer-Verlag, 1985.[EhM90] H. Ehrig, B. Mahr. Fundamentals of Algebraic Specification , Vol. 2. EATCS

    Monographs on Theoretical Computer Science, Springer-Verlag, 1990.[GoB91] G.H. Gonnet, R. Baeza-Yates. Handbook of Algorithms and Data Structures.

    Addison-Wesley, 2 edicin,1991.[HoS94] E. Horowitz, S. Sahni. Fundamentals of Data Structures in Pascal . Computer

    Science Press, 4 edicin,1994.[Knu68] D.E. Knuth. The Art of Computer Programming, Vol. 1. Addison-Wesley, 1968.[Knu73] D.E. Knuth. The Art of Computer Programming, Vol. 3. Addison-Wesley, 1973.[LiG86] B.H. Liskov, J.V. Guttag. Abstraction and Specification in Program Development .

    The MIT Press, 1986.[Mar86] J.J. Martin. Data Types and Data Structures. Prentice-Hall, 1986.[Meh84] K. Mehlhorn. Data Structures and Algorithms, vols. 1 y 2. Springer-Verlag, 1984.[Pe98] R. Pea. Diseo de Programas (2 edicin). Prentice Hall, 1998.[Tar83] R.E. Tarjan. Data Structures and Network Algorithms. Regional Conference Series

    in Applied Mathematics (SIAM), Philadelphia, Pennsylvania, 1983.[TeA86] A.M. Tenenbaum, M.J. Augenstein. Data Structures using PASCAL. Prentice-Hall,

    2 edicin, 1986.[vAP89] J.J. van Amstel, J.A.A.M. Poirters. The Design of Data Structures and Algorithms.

    Prentice Hall and Academic Service, 1989.[Wir86] N. Wirth. Algorithms and Data Structures. Prentice-Hall, 1986.

    Bibliografa 4 5 3__________________________________________________________________________________

  • ndice temtico

    A

    Abstraccin ....................................20,23Accin (en Merl) ..................................95Acoplamiento de estructuras de datos.138Adyacencia........................................350lgebra

    cociente de trminos..................40de trminos................................31inicial .........................................40objeto matemtico ................25, 30respecto una signatura ...............30

    AlgoritmoBrent.......................................288complecin (Knuth-Bendix) ........79Dijkstra.....................................370Floyd.......................................376Kruskal.............................333, 384ordenacin por insercin ..........122ordenacin por montculo.........238Prim.........................................381voraz .......................................381

    Altura (de un rbol) .............................198Antecesor (en un grafo)......................361Apiamiento ..............................282, 290

    primario....................................283Apuntador...........................................98

    de sitio libre................................98externo....................................139

    rbol ...............................................195

    2-3, B, B*, B+...........................303AVL.........................................303binario..............................196, 201de bsqueda....................221, 297casi-completo...................213, 233cerrado por prefijo ....................196compacto.................................196completo .................................213enhebrado...............................224de Fibonacci ............................303equilibrado...............................303etiquetado...............................196de expansin ...................379, 380de expansin de coste mnimo..380general ....................................196libre.........................................380n-ario.......................................196parcialmente ordenado.............233con punto de inters.........196, 202quadtree..................................246con raz....................................380

    Arco..................................................346Aridad

    de un rbol...............................199de un smbolo............................28

    Arista ..........................................v. arcoAscendente (en un rbol) ...................199Atajo .................................................138Axioma (especificacin ecuacional) .......34

    B

    Basura...............................................178Biblioteca de mdulos reusables...24, 125Bosque.............................................200Bsqueda

    auto-organizativa......................255de caminos mnimos.................369dicotmica (binaria)...................256por interpolacin ......................256lineal........................................256

    ndice temtico 4 5 5__________________________________________________________________________________

  • con movimiento al inicio ............255por transposicin......................255

    C

    Cadena ...............................v. secuenciapredicado cadena.....................171de reubicacin .........................282

    Caminoen un rbol...............................198de un clave (de dispersin) .......278en un grafo ..............................350mnimo ....................................369

    Campo (de tupla)..................................91Categora ............................................74Ciclo ...............................................351Clave ...............................................249

    indefinida.................................249invasora...................................278

    Colisin.............................................258Cola

    circular.....................................159compartida...............................423prioritaria ..........................231, 237TAD.........................................158

    Complejidad..........................v. eficienciaComponente (fuertemente) conexo....350Compresin de caminos.....................342Conexin (en un grafo).......................350Congruencia induida por las ecuaciones39Conjunto

    de base .....................................30TAD.........................................252

    Constanteorden de magnitud ...................116valor ..........................................30

    Constructor de tipopor enumeracin........................91puntero ...................................173tupla..........................................91vector........................................91

    Coste ...................................v. eficienciaCuadrado (mtodo)............................263Cubeta..............................................258Cursor.................................................98

    D

    Deduccin ecuacional..........................77Desbordamiento

    en el clculo.............................262en una tabla .............................274

    Descendienteen un rbol...............................199en un grafo ..............................361

    Desequilibrio .....................................305DD...................................305, 308DI.....................................307, 310

    Digrafo ............................v. grafo dirigidoDiseo

    descendente.............................22de estructuras de datos ............397modular (con TAD)......................22

    Dispersinconcepto.................................258funcin ............................258, 259incremental ..............................274organizaciones.........................270perfecta...................................260valor de dispersin ...................258

    Divisin (mtodo)...............................263

    E

    Ecuacin.............................................34condicional ................................49impurificadora.............................46parte derecha/izquierda..............35de recurrencia ..........................119

    Eficiencia.....................................23, 108amortizada ...............................345

    4 5 6 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • en el caso peor..................110, 113Elemento

    definido...................................249distinguido...............................162fantasma (centinela)..................170

    Encadenamiento ...............................168Enlace.......................v. encadenamientoEnsayo..............................................278Enriquecimiento ..................................67Especificacin .....................................20

    algebraica (ecuacional) ..........25, 34mtodo de construccin.............47parametrizada (genrica).............69pre-post.....................................97

    Esquemas de programacin ...............131de bsqueda....................131, 163de recorrido......................131, 163

    Estructura de datos..............................25funcional..................................249lineal........................................151de particin..............................332

    Etiqueta.....................................196, 346de coste nulo...........................369

    Evaluador de expresiones..................399Extremidad (de un camino) .................350

    F

    Factorde carga (rbol).........................219de carga (tabla).........................292de equilibrio.............................304

    Formade un rbol...............................196normal .......................................78

    Funcinde abstraccin..........................100de Ackerman............................345de asignacin de variables ..........33de evaluacin de trminos ..........33de dispersin ...................258, 259

    en Merl .....................................95parcial ..............................249, 250de redispersin........................278de representacin....................100TAD.........................................249total .................................249, 250universal ..................................263

    Funtor.................................................75

    G

    Gnero .........................................v. tipoGrado v. aridadGrafo.................................................320

    acclico ....................................351bipartito ...................................346completo .................................348denso......................................348dirigido ....................................346disperso ..................................348etiquetado...............................346no dirigido................................346no etiquetado ..........................346TAD.........................................346

    H

    Hermano (en un rbol) ........................199Hijo (en un rbol) ................................199

    derecho, izquierdo...................202izquierdo, hermano derecho.....214

    Hoja ...............................................198

    I

    Identificador.......................................249Implementacin ...................................20

    correccin..................................98eficiencia .................................108

    ndice temtico 4 5 7__________________________________________________________________________________

  • lenguaje de implementacin .......98universo de implementacin..89, 90

    ndicea tabla......................................249a vector......................................91

    Instancia..............................................69parcial ........................................73

    Invariantede un bucle................................93de una representacin..............100

    Invasor ...........................v. clave invasoraIsomorfismo.........................................32Iterador..............................................128

    L

    liberar_espacio ..................................174Lista

    de adyacencia..........................355auto-organizativa......................255circular.....................................186doblemente encadenada..........187encadenada.............................143ordenada.................................161con punto de inters ................162

    M

    Marca ................................................143Matriz

    de adyacencia..........................352dispersa...................................324

    Memoria dinmica.......................174, 405MFSet ...............................................332Modelo

    de un TAD............................25, 43inicial .........................................37

    Mdulo................................................23Montculo ..................................212, 235

    de Fibonacci ............................370

    Morfismo .............................................32Multilista (de grado dos)......................324Multilista de adyacencia ......................358

    N

    Nivel (en un rbol) ..............................198Nodo .................................195, 197, 346Notacin asinttica

    O.............................................112 .............................................112 .............................................113

    Notacin infix.....................................400Notaci postfix (polaca).......................399NULO................................................174

    O

    Obsolescencia (de atajos)...................142obtener_espacio ...............................174Ocultacin de smbolos........................67Operacin ...........................................30

    auxiliar (oculta, privada) ...............50consultora..................................46constructora...............................46constructora generadora.............46modificadora ..............................46

    Orden de magnitud ............................113

    P

    Padre (en un rbol).............................199Parmetro

    de entrada y/o de salida ..............95formal ........................................69real ............................................70

    Parametrizacin ...................................69Paso de parmetros .............................70Pila

    4 5 8 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • de sitios libres...................146, 169TAD.........................................151

    Plegamiento-desplegamiento.............263Posicin

    de elemento ............................138de vector ...................................91

    Postcondicin .....................................97Precondicin.......................................97Prioridad............................................231Programacin dinmica.......................376Profundidad (en un rbol) .............v. nivelPuntero.............................................173Punto de acceso (en iterador).............128

    R

    Raz...........................................195, 198Rama.................................................199Recoleccin de basura.......................178Recorrido

    en anchura........219, 228, 361, 364inorden....................................220por niveles .......................219, 228en ordenacin topolgica..360, 365postorden................................220preorden .................................220en profundidad ........................360en profundidad hacia atrs ........362

    Redispersin.....................................278Reescritura ..................................78, 247Referencia colgada ............................177Regla de escritura ................................78Relacin

    binaria (TAD).............................319binaria etiquetada.....................319de equivalencia (TAD) .......320, 332etiquetada ...............................320de igualdad..............................100m:n .................................v. binaria

    Renombramiento de smbolos..............68Representante

    cannico..............................41, 46de clase (de equivalencia).........340

    Representacin de tipo ..................90, 91encadenada.....................166, 168circular.....................................186doblemente.............................187secuencial........................154, 166

    Reubicacin...............................143, 145Reusabilidad..................................41, 46Robin Hood (mtodo).........................289Rotacin............................................306

    S

    S-aplicacin.........................................32S-conjunto ..........................................27Secuencia.........................................151Semntica de un TAD...........................43

    de comportamiento ....................44final ...........................................43inicial .........................................43laxa............................................44

    SIG-lgebra..........................................30Signatura.............................................26Smbolo

    de constante..............................28de operacin..............................28

    Sinnimo...........................................258Sistema de reescritura..........................78

    Cannico...................................79Confluente ................................79Noetheriano...............................79

    Subrbol....................................195, 199Subcamino........................................350Subciclo............................................351Subgrafo...........................................350Suma ponderada ...............................261

    ndice temtico 4 5 9__________________________________________________________________________________

  • TTablade dispersin...........................258de smbolos .......................60, 420TAD.........................................249

    TAD ................v. Tipo Abstracto de DatosTeorema ecuacional .............................77Teora ecuacional.................................77Trmino...............................................28

    sobre SIG...................................28Tipo

    auxiliar (oculto, privado)...............50de datos...............................19, 25de inters ..................................66

    Tipo Abstracto de Datos (TAD) ..............19abierto.....................................146parcialmente abierto .................139recorrible .................................128recorrible ordenadamente.........128totalmente abierto ...........v. abierto

    Tupla...................................................91variante......................................91

    U

    Union-find set ....................................332Universo..............................................26

    de caracterizacin.......................69de definicin (de especificacin) .35genrico (parametrizado) ............70de implementacin ...............89, 90

    Uso ...............................................45, 66

    V

    Valor de dispersin.............................258Variable ...............................................29

    de control (bucle) .......................93global ........................................95

    local...........................................95Vector .................................................91Vrtice ..............................................346

    intermedio (en un camino).........350

    Z

    Zona de excedentes..........................274Zona principal ....................................274

    4 6 0 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

  • ndice de universosALFABETO..........................................57ARBOL_BINARIO...............................203ARBOL_BINARIO_DE_BUSQUEDA.....30ARBOL_BINARIO_ENC_1_VECTOR..210ARBOL_BINARIO_ENC_PUNTEROS.205ARBOL_GENERAL............................201ARBOL_GENERAL_POR_BINARIO ...216BOOL ............................................26, 35CADENA........................................57, 76CJT......................................................70CJT_ .................................................71CJT__ACOTADO.............................127CJT__ACOTADO_IND......................137CJT__ACOT._IND_PARC_ABIERTO 141CJT__ACOTADO_POR_VECT...99, 127CJT__ACOTADO_RECORRIBLE .....129CJT__ACOT._REC._POR_VECT.....133CJT__ACOTADO_REC._ORD..........131CJT__ACOT._REC._ORD_VECT_1.134CJT__ACOT._REC._ORD_VECT_2.135CJT_RECORRIBLE............................253CLAVE_DISPERSION ........................268CLAVE_DISPERSION_LINEAL...........286CLAVE_REDISPERSIN....................280COLA ................................................159COLA_CIRCULAR..............................161COLA_PRIORITARIA..........................232COLA_PRIOR._POR_MONTICULO....236COMPOSICION_F_Y_G......................268CONJUNTO .......................................252

    COORDENADAS .................................69DIGRAFO_ETIQ .................................349DIGRAFO_ETIQ_LISTAS....................355DIGRAFO_ETIQ_MATRIZ....................353DIGRAFO_ETIQ_MULTILISTAS...........359DIVISION............................................268DOS_ENTEROS ............................69, 72ELEM ..................................................70ELEM_= ..............................................71ELEM_< ..............................................76ELEM_

  • RELACION_DE_EQUIVALENCIA........335RELACION_DE_EQUIV._ARB............343RELACION_DE_EQUIV._LINEAL .......338RELACION_ETIQUETADA..................323SUMA_POND ....................................267SUMA_POND_Y_DIV.........................269TABLA_DIRECTA...............................276TABLA_IND_PUNTEROS...................272TABLA_ABIERTA...............................280VAL_NAT.............................................73VECTOR............................................157

    4 6 2 Estructuras de datos. Especificacin, diseo e implementacin __________________________________________________________________________________

    c: Los autores, 2002; Edicions UPC, 2002.