SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
POLITEXT




Xavier Franch Gutiérrez




Estructuras de datos
Especificación, diseño e implementación




                                  EDICIONS UPC
A mis padres, por todo lo que me han dado
   A Cristina, por lo que nos espera juntos
A Miguel Angel, presente en mis recuerdos
Índice                                                                          7
__________________________________________________________________________________




Índice

Presentación ...........................................................................................................11

Prólogo ....................................................................................................................13


Capítulo 1 Especificación de tipos abstractos de datos

Presentación...............................................................................................................19
1.1 Introducción a los tipos abstractos de datos .........................................................19
1.2 Modelo de un tipo abstracto de datos..................................................................25
       1.2.1 Signaturas y términos...............................................................................26
       1.2.2 Modelos asociados a una signatura...........................................................29
       1.2.3 Evaluación de un término dentro de un álgebra .........................................32
       1.2.4 Ecuaciones y especificaciones algebraicas................................................34
       1.2.5 Modelo inicial de una especificación..........................................................37
       1.2.6 Otros modelos posibles ...........................................................................43
1.3 Construcción sistemática de especificaciones......................................................45
       1.3.1 Introducción al uso de especificaciones ....................................................45
       1.3.2 Clasificación de las operaciones de una especificación...............................46
       1.3.3 Método general de construcción de especificaciones................................47
1.4 Ecuaciones condicionales, símbolos auxiliares y errores.......................................48
       1.4.1 Ecuaciones condicionales........................................................................48
       1.4.2 Tipos y operaciones auxiliares ..................................................................50
       1.4.3 Tratamiento de errores.............................................................................51
1.5 Estudio de casos ...............................................................................................53
       1.5.1 Especificación de algunos tipos de datos clásicos......................................54
       1.5.2 Especificación de una tabla de símbolos ...................................................60
       1.5.3 Especificación de un sistema de reservas de vuelos ..................................63
1.6 Estructuración de especificaciones.....................................................................66
       1.6.1 Uso de especificaciones ..........................................................................66
       1.6.2 Ocultación de símbolos............................................................................67
       1.6.3 Renombramiento de símbolos..................................................................68
       1.6.4 Parametrización e instanciación ................................................................69
       1.6.5 Combinación de los mecanismos..............................................................75
1.7 Ejecución de especificaciones............................................................................76
       1.7.1 La deducción ecuacional..........................................................................77
       1.7.2 La reescritura...........................................................................................78
Ejercicios ....................................................................................................................80




                                             © Los autores, 2002; © Edicions UPC, 2002.
8                                      Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



Capítulo 2 Implementación de tipos abstractos de datos

Presentación...............................................................................................................89
2.1 El lenguaje de implementación ...........................................................................89
       2.1.1 Representación de tipos..........................................................................91
       2.1.2 Sentencias..............................................................................................93
       2.1.3 Funciones y acciones ..............................................................................95
       2.1.4 Ejemplo: una implementación para los conjuntos.......................................97
2.2 Corrección de una implementación .....................................................................98
2.3 Estudio de la eficiencia de las implementaciones................................................108
       2.3.1 Notaciones asintóticas ...........................................................................111
       2.3.2 Órdenes de magnitud más habituales .....................................................116
       2.3.3 Análisis asintótico de la eficiencia temporal ..............................................118
       2.3.4 Análisis asintótico de la eficiencia espacial ...............................................121
2.4 Conflicto entre eficiencia y modularidad.............................................................124
       2.4.1 Falta de funcionalidad en la signatura ......................................................125
       2.4.2 Tipos abstractos de datos recorribles ......................................................128
       2.4.3 Tipos abstractos de datos abiertos..........................................................136
Ejercicios ..................................................................................................................148


Capítulo 3 Secuencias

Presentación.............................................................................................................151
3.1 Pilas................................................................................................................151
       3.1.1 Especificación.......................................................................................153
       3.1.2 Implementación.....................................................................................154
3.2 Colas...............................................................................................................158
       3.2.1 Especificación.......................................................................................158
       3.2.2 Implementación.....................................................................................159
3.3 Listas ..............................................................................................................162
       3.3.1 Especificación de las listas con punto de interés......................................162
       3.3.2 Implementación de las listas con punto de interés....................................166
       3.3.3 Implementación de estructuras de datos con punteros.............................173
       3.3.4 Transparencia de la representación usando punteros ..............................178
       3.3.5 Implementaciones encadenadas y TAD abiertos ......................................186
Ejercicios ..................................................................................................................189


Capítulo 4 Árboles

Presentación.............................................................................................................195
4.1 Modelo y especificación ...................................................................................196
     4.1.1 Modelo de árbol general.........................................................................196
     4.1.2 Modelo de árbol binario..........................................................................201
     4.1.3 Modelo de árbol con punto de interés.....................................................202




                                            © Los autores, 2002; © Edicions UPC, 2002.
Índice                                                                          9
__________________________________________________________________________________



4.2    Implementación ...............................................................................................204
       4.2.1 Implementación de los árboles binarios ...................................................204
       4.2.2 Implementación de los árboles generales................................................213
       4.2.3 Variaciones en los otros modelos de árboles............................................218
       4.2.4 Estudio de eficiencia espacial.................................................................218
4.3 Recorridos.......................................................................................................219
       4.3.1 Recorridos en profundidad de los árboles binarios...................................220
       4.3.2 Árboles binarios enhebrados..................................................................224
       4.3.3 Recorrido por niveles de los árboles binarios ...........................................228
4.4 Colas prioritarias...............................................................................................231
       4.4.1 Implementación por árboles parcialmente ordenados y casi completos......233
       4.4.2 Aplicación: un algoritmo de ordenación...................................................238
Ejercicios ..................................................................................................................243


Capítulo 5 Tablas

Presentación.............................................................................................................249
5.1 Especificación .................................................................................................250
       5.1.1 Funciones totales..................................................................................250
       5.1.2 Conjuntos.............................................................................................252
       5.1.3 Tablas y conjuntos recorribles.................................................................252
5.2 Implementación ...............................................................................................254
       5.2.1 Implementación por listas desordenadas.................................................254
       5.2.2 Implementación por listas ordenadas.......................................................255
       5.2.3 Implementación por vectores de acceso directo.......................................257
       5.2.4 Implementación por tablas de dispersión.................................................258
5.3 Funciones de dispersión..................................................................................259
       5.3.1 Funciones de traducción de cadenas a enteros.......................................260
       5.3.2 Funciones de restricción de un entero en un intervalo .............................263
       5.3.3 Funciones de traducción de cadenas a enteros en un intervalo ................265
       5.3.4 Caracterización e implementación de las funciones de dispersión.............266
5.4 Organizaciones de las tablas de dispersión........................................................270
       5.4.1 Tablas de dispersión encadenadas .........................................................270
       5.4.2 Tablas de dispersión de direccionamiento abierto ....................................278
       5.4.3 Caracterización e implementación de los métodos de redispersión ...........285
       5.4.4 Variantes de las tablas de dispersión de direccionamiento abierto .............288
       5.4.5 Tablas dedispersión coalescentes ..........................................................289
       5.4.6 Evaluación de las diferentes organizaciones............................................291
       5.4.7 Elección de una organización de dispersión............................................292
       5.4.8 Las organizaciones de dispersión en tablas recorribles y tablas abiertas.....295
       5.4.9 Inconvenientes de la dispersión .............................................................296
5.5 Árboles binarios de búsqueda ..........................................................................297
5.6 Árboles AVL ....................................................................................................303
Ejercicios ..................................................................................................................315




                                            © Los autores, 2002; © Edicions UPC, 2002.
10                                     Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



Capítulo 6 Relaciones binarias y grafos

Presentación.............................................................................................................319
6.1 Relaciones binarias ..........................................................................................320
       6.1.1 Especificación.......................................................................................320
       6.1.2 Implementación.....................................................................................324
6.2 Relaciones de equivalencia ..............................................................................332
       6.2.1 Implementaciones lineales .....................................................................335
       6.2.2 Implementación arborescente ................................................................340
       6.2.3 Compresión de caminos.........................................................................342
6.3 Grafos .............................................................................................................346
       6.3.1 Modelo y especificación.........................................................................348
       6.3.2 Implementación.....................................................................................352
6.4 Recorridos de grafos........................................................................................360
       6.4.1 Recorrido en profundidad ......................................................................361
       6.4.2 Recorrido en anchura.............................................................................364
       6.4.3 Recorrido en ordenación topológica .......................................................365
6.5 Búsqueda de caminos mínimos ........................................................................369
       6.5.1 Camino más corto de un nodo al resto.....................................................370
       6.5.2 Camino más corto entre todo par de nodos..............................................376
6.6 Árboles de expansión minimales.......................................................................379
       6.6.1 Algoritmo de Prim ..................................................................................381
       6.6.2 Algoritmo de Kruskal..............................................................................384
Ejercicios ..................................................................................................................387


Capítulo 7 Uso y diseño de tipos abstractos de datos

Presentación.............................................................................................................397
7.1 Uso de tipos abstractos de datos existentes ......................................................398
       7.1.1 Un evaluador de expresiones.................................................................399
       7.1.2 Un gestor de memoria dinámica ..............................................................405
       7.1.3 Un planificador de soluciones.................................................................412
7.2 Diseño de nuevos tipos abstractos de datos......................................................420
       7.2.1 Una tabla de símbolos............................................................................420
       7.2.2 Una cola compartida...............................................................................423
       7.2.3 Una emisora de televisión.......................................................................430
Ejercicios ..................................................................................................................439


Bibliografía ............................................................................................................453

Índice temático .....................................................................................................455

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




                                            © Los autores, 2002; © Edicions UPC, 2002.
Presentación                                                                    11
__________________________________________________________________________________




Presentación

Cuando me piden que escriba el prólogo de un libro, me da un poco de vergüenza, ya que
se trata de una de mis asignaturas pendientes: he tenido hijos y he plantado árboles, y
también he escrito muchas líneas, pero nunca un libro. Así que hacer de prologuista sin
haber sido autor me provoca un cierto sentimiento de jubilación anticipada. En este caso, no
obstante, este sentimiento se confunde con una fuerte sensación de orgullo y satisfacción,
provocada por el excelente trabajo de alguien que, en parte, me permito considerar discípulo
mío en el sentido ancestral de la palabra. Xavier Franch, autor de este libro, ha sido alumno
mío durante sus estudios en la Facultat d'Informàtica de Barcelona, colaborador becario
mientras era estudiante, después alumno de doctorado y compañero de departamento y,
para terminar, siempre hemos trabajado juntos en proyectos de investigación y he dirigido su
tesis doctoral. Tengo motivos, pues, para sentir esta satisfacción.

El texto en cuestión, además de actualizar el contenido de las materias ya clásicas de
estructuras de datos, se adapta perfectamente al temario de una asignatura de los planes de
estudio vigentes en la Facultat d'Informàtica de Barcelona, lo cual justificaría de por sí su
existencia. Pero, además, por su actualización del tema puede servir, total o parcialmente,
para otros estudios de informática o para cualquier asignatura sobre estructuras de datos de
otros planes de estudios en la Universitat Politècnica de Catalunya o en otras universidades.
Y, como valor añadido, es destacable la experiencia del autor en la docencia de la asignatura
“Estructuras de Datos y Algoritmos”, de los nuevos planes estudio vigentes en la Facultat
d'Informàtica de Barcelona.

La notación empleada tanto en las especificaciones como en las implementaciones de las
estructuras de datos es Merlí, lenguaje emblemático del proyecto Excalibur y notación que,
desde hace ya muchos años, ha caracterizado las diversas enseñanzas algorítmicas en
nuestra facultad.

Por todo lo dicho es obvio que no soy nada imparcial a la hora de juzgar el trabajo del profesor
Xavier Franch, pero también tengo claro que la parcialidad es una pequeña licencia que, en
una presentación, nos podemos permitir.




                                 © Los autores, 2002; © Edicions UPC, 2002.
12                                     Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



Como ya he dicho, un excelente texto, que pone al día un tema clásico en informática. Mi
enhorabuena al autor. Y también al lector, que encontrará una muestra de aquello que el
profesor Turski decía hace muchos años: “no hay nada más práctico que una buena teoría”.
Sobre todo si se explica desde un conocimiento sólido de la práctica.



                                   Pere Botella i López
        Catedrático del Departamento de Lenguajes y Sistemas Informáticos (U.P.C.)
                  Decano de la Facultat d'Informàtica de Barcelona (U.P.C.)




                                  © Los autores, 2002; © Edicions UPC, 2002.
Prólogo                                                                         13
__________________________________________________________________________________




Prólogo

El estudio de las estructuras de datos es casi tan antiguo como el nacimiento de la
programación, y se convirtió en un tema capital en este ámbito desde finales de la década de
los 60. Como es lógico, una de las consecuencias de este estudio es la aparición de una
serie de libros de gran interés sobre el tema, algunos de ellos ciertamente excelentes y que
se han convertido en piedras angulares dentro de la ciencia de la programación (citemos, por
ejemplo, los textos de D.E. Knuth; de A.V. Aho, J. Hopcroft y J.D. Ullman; de E. Horowitz y
D. 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 programación ha dado como resultado la aparición
de nuevos conceptos, algunos de los cuales no se han consolidado hasta la segunda mitad
de la década de los 80. Muchos de estos conceptos están íntimamente interrelacionados
con el ámbito de las estructuras de datos, y ésta es la razón por la cual los libros antes citados
han quedado actualmente un poco desfasados en lo que respecta al método de desarrollo
de programas que siguen, incluso en sus reediciones más recientes.

En este contexto, he confeccionado el libro "Estructuras de datos. Especificación, diseño e
implementación", que trata el estudio de las estructuras de datos dentro del marco de los
tipos abstractos de datos. La adopción de este enfoque se inscribe en una metodología de
desarrollo modular de programas, que abunda en diferentes propiedades interesantes en la
producción industrial de aplicaciones (corrección, mantenimiento, etc.), y permite enfatizar
diversos aspectos importantes hoy en día: la necesidad de especificar el software, la
separación entre la especificación y la implementación, la construcción de bibliotecas de
componentes, la reusabilidad del software, etc. Diversos autores han explorado esta
metodología (sobre todo, desde las aportaciones de B. Liskov y J.V. Guttag), pero sin
aplicarla en el contexto de las estructuras de datos.

Destinatario
El libro ha sido concebido sobre todo como un texto de ayuda para alumnos de una
asignatura típica de estructura de datos en un primer ciclo de ingeniería en informática;
también se puede considerar adecuado para cualquier otra titulación técnica superior o
media con contenido informático. A tal efecto, cubre el temario habitual de esta asignatura en
tono autoexplicativo, y se ilustra con numerosas figuras, especificaciones y programas.




                                 © Los autores, 2002; © Edicions UPC, 2002.
14                                     Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



Dependiendo de los objetivos de la asignatura, el formalismo asociado al estudio de estos
temas puede ser más o menos acusado; sea como sea, el libro puede usarse como texto
básico de consulta.

Ahora bien, los temas que aparecen en el libro se han desarrollado con más profundidad que
la estrictamente requerida por el alumno y, por ello, hay más posibles destinatarios. Por un
lado, el mismo profesor de la asignatura, porque puede encontrar en un único volumen los
aspectos de especificación y de diseño que no acostumbran a aparecer en los libros de
estructuras de datos; además, la inclusión de especificaciones y de programas libera al
docente de la necesidad de detallarlos en sus clases. Por otro lado, cualquier informático
que quiera profundizar en el estudio de las estructuras de datos más allá de su aspecto
puramente de programación, puede encontrar aquí una primera referencia.

Contenido
En el primer capítulo se introduce el concepto de tipo abstracto de datos. Después de
analizar su repercusión en el diseño de programas, nos centramos en el estudio de su
especificación formal, que es la descripción exacta de su comportamiento. De entre las
diferentes opciones existentes de especificación formal, se sigue la llamada especificación
ecuacional interpretada con semántica inicial. El capítulo muestra un método general para
construir especificaciones para los tipos, les otorga un significado matemático (como
álgebras heterogéneas) y también estudia su estructuración, y aquí destaca la posibilidad de
definir tipos genéricos, profusamente utilizados a lo largo del libro.

En el segundo capítulo se estudian diversos aspectos sobre la implementación de los tipos
de datos. El proceso de implementación se lleva a cabo cuando existe una especificación
para el tipo; la segunda sección insiste precisamente en la relación formal entre los dos
conceptos, especificación e implementación. También se introduce un punto clave en el
análisis de los algoritmos y las estructuras de datos que se desarrollarán posteriormente: el
estudio de su eficiencia a través de las denominadas notaciones asintóticas. Por último, se
muestran algunas situaciones de la programación con tipos abstractos de datos que pueden
causar problemas de eficiencia, y se formulan algunos patrones de comportamiento para
solucionar estos problemas.

Las diversas familias de estructuras de datos se introducen en los cuatro capítulos
siguientes: se estudian las secuencias; los árboles; las tablas y los conjuntos; y las relaciones
binarias y los grafos. Para todas ellas se sigue el mismo método: descripción informal,
formulación de un modelo, especificación algebraica del tipo e implementaciones más
habituales. Por lo que se refiere a estas últimas, se detalla la representación del tipo y la
codificación de las operaciones (hasta el último detalle y buscando la máxima legibilidad
posible mediante el uso de funciones auxiliares, diseño descendente, comentarios, etc.),
siempre en el caso de implementación en memoria interna; a continuación, se estudia su
eficiencia tanto temporal como espacial y se proponen varios ejercicios.




                                  © Los autores, 2002; © Edicions UPC, 2002.
Prólogo                                                                         15
__________________________________________________________________________________



Por último, el capítulo final muestra la integración del concepto de tipo abstracto de datos
dentro del desarrollo modular de programas, y lo hace bajo dos vertientes: el uso de los tipos
abstractos previamente introducidos y el diseño de nuevos tipos de datos. El estudio se
hace a partir de seis ejemplos escogidos cuidadosamente, que muestran la confrontación de
los criterios de modularidad y eficiencia en el diseño de programas.

Para leer el texto, son necesarios unos conocimientos fundamentales en los campos de las
matemáticas, de la lógica y de la programación. De las matemáticas, los conceptos básicos de
conjunto, producto cartesiano, relación, función y otros similares. De la lógica, el concepto
de predicado, los operadores booleanos y las cuantificaciones universal y existencial. De la
programación, 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 (tuplas
y vectores), de las estructuras de control de flujo (asignaciones, secuencias, alternativas y
bucles) y de los mecanismos de encapsulamiento de código (acciones y funciones).

Es importante destacar algunos puntos que el libro no trata, si bien por su temática se podría
haber considerado la posibilidad de incluirlos. Primero, no aparecen algunas estructuras de
datos especialmente eficientes que, por su complejidad, superan el nivel de una asignatura
de primer ciclo de ingeniería; por ejemplo, diversas variantes de montículos y de árboles de
búsqueda (Fibonnaci Heaps, Red-Black Trees, Splay Trees, etc.) y de dispersión (Perfect
Hashing, principalmente). También se excluyen algunas otras estructuras que se aplican
principalmente a la memoria secundaria, como pueden ser las diversas variantes de árboles B
y también los esquemas de dispersión incremental (Extendible Hashing, Linear Hashing,
etc.). Tampoco se tratan en el libro algunos temas característicos de la programación, como
pueden ser el estudio de diversas familias de algoritmos (Greedy Algorithms, Dynamic
Programming, etc.) de los cuales constan algunos casos particulares en el capítulo de grafos;
o como las técnicas de derivación y de verificación formal de programas, si bien se usan
algunos elementos (invariantes de bucles, precondiciones y postcondiciones de funciones,
etc.). Hay diversos libros de gran interés que sí tratan en profundidad estos temas, cuyas
referencias aparecen convenientemente en este texto. Por último, no se utilizan los
conceptos propios de la programación orientada a objetos (básicamente, herencia y
vinculación dinámica) para estructurar los tipos de datos formando jerarquías; se ha preferido
el enfoque tradicional para simplificar el volúmen de la obra y no vernos obligados a introducir
la problemática inherente a este paradigma de la programación.

Bibliografía
Las referencias bibliográficas del libro se pueden dividir en dos grandes apartados. Por un
lado se citan todos aquellos artículos que son de utilidad para temas muy concretos, cuya
referencia aparece integrada en el texto en el mismo lugar en que se aplican. Por el otro, hay
diversos textos de interés general que cubren uno o más capítulos del libro y que aparecen
dentro del apartado de bibliografía; estos libros han de considerarse como los más
destacables en la confección de esta obra y no excluye que haya otros, igualmente buenos,




                                 © Los autores, 2002; © Edicions UPC, 2002.
16                                     Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



que no se citan, bien porque su temática es muy similar a alguno de los que sí aparecen, bien
porque el desarrollo de los temas es diferente al que se sigue aquí.

Lenguaje
En cualquier texto sobre programación, es fundamental la elección del lenguaje utilizado
como vehículo para codificar (y, en este libro, también para especificar) los esquemas que se
introducen. En vez de especificar y programar usando algun lenguaje existente, he preferido
emplear la notación Merlí, diseñada por diversos miembros del Departament de Llenguatges
i Sistemes Informàtics (antiguamente, Departament de Programació) de la Universitat
Politècnica de Catalunya. Esta notación ha sido utilizada desde principios de los años 80 por
los profesores del departamento en la impartición de las asignaturas de programación de los
primeros niveles de las titulaciones en informática y ha demostrado su validez como
herramienta para el aprendizaje de la programación. Las razones de esta elección son
básicamente dos: por un lado, disponer de una notación abstracta que permita expresar
fácilmente los diferentes esquemas que se introducen sin ningún tipo de restricción
impuesta por el lenguaje; por otro, usar una sintaxis muy parecida tanto para especificar como
para implementar los tipos de datos (el hecho de que el mismo lenguaje se pueda usar
desde estos dos niveles diferentes refuerza la relación entre la especificación y la
implementación de los tipos de datos, que es uno de los objetivos del texto). El
inconveniente principal es la necesidad de traducir las especificaciones y los programas que
aparecen en este texto a los lenguajes que el lector tenga a su disposición; ahora bien, este
inconveniente no parece muy importante, dado que Merlí es fácilmente traducible a
cualquier lenguaje comercial (a algunos mejor que a otros, eso sí), y que podría haber
aparecido el mismo problema fuera cual fuera el lenguaje de trabajo elegido.

Terminología
Dado que, hoy en día, el idioma dominante en el ámbito de la informática es el inglés, he
hecho constar las acepciones inglesas junto a aquellos vocablos que denotan conceptos
básicos y universalmente aceptados; de esta manera, el lector puede relacionar rápidamente
estos conceptos dentro de su conocimiento de la materia o, en el caso de que sea el primer
libro que lee sobre estructuras de datos, adquirir el vocabulario básico para la lectura
posterior de textos ingleses. Los términos ingleses se escriben siempre en singular
independientemente del género con el que se usen en castellano.

Por el mismo motivo, se utilizan de manera consciente varios anglicismos usuales en el
ámbito de la programación para traducir algunos términos ingleses. Dichos anglicismos se
limitan a lo estrictamente imprescindible, pero he creído conveniente seguir la terminología
técnica habitual en vez de introducir vocablos más correctos desde el punto de vista
linguístico pero no tan profusamente usados.




                                  © Los autores, 2002; © Edicions UPC, 2002.
Prólogo                                                                         17
__________________________________________________________________________________



Agradecimientos
Este libro es el resultado de una experiencia personal de varios años de docencia en las
asignaturas de estructuras de datos en los planes de licenciatura e ingeniería de la Facultat
d'Informàtica de Barcelona de la Universitat Politècnica de Catalunya, por lo que refleja un
gran número de comentarios y aportaciones de todos los profesores que, a lo largo de este
período, han sido compañeros de asignatura. Quizás el ejemplo más paradigmático sea la
colección de ejercicios propuestos en el texto, muchos de ellos provinentes de las listas de
ejercicios y exámenes de las asignaturas citadas. Para ellos mi más sincero agradecimiento.
En particular, quiero citar al profesor Ricardo Peña por su ayuda durante el primer año que
impartí la asignatura "Estructuras de la Información"; a los profesores y profesoras M.T. Abad,
J.L. Balcázar, J. Larrosa, J. Marco, C. Martínez, P. Meseguer, T. Moreno, P. Nivela, R.
Nieuwenhuis y F. Orejas por la revisión de secciones, versiones preliminares y capítulos
enteros del texto y por la detección de errores; y, sobre todo, al profesor Xavier Burgués por
todos los años de continuos intercambios de opinión, sugerencias y críticas. A todos ellos,
gracias.

Contacto
El lector interesado puede contactar con el autor en la dirección electrónica
franch@lsi.upc.es, o bien dirigiéndose al departamento de Llenguatges i Sistemes
Informàtics de la Universitat Politècnica de Catalunya. En especial, el autor agradecerá la
notificación de cualquier errata detectada en el texto, así como toda sugerencia o crítica a la
obra. También existe una página web con información sobre el libro, que se intenta mantener
actualizada, cuya dirección es http://www-lsi.upc.es/~franch/publis/libro-eds.html.




                                           Barcelona, 10 de Junio de 1996 (primera edición)
                                                      12 de Noviembre de 2001 (última edición)




                                © Los autores, 2002; © Edicions UPC, 2002.
Bibliografía                                                                   453
__________________________________________________________________________________




Bibliografía


[ADJ78] J.A. Goguen, J.W. Thatcher, E.G. Wagner. "An Initial Algebra Approach to the
        Specification, Correctness and Implementation of Abstract Data Types". En
        Current 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. Balcázar. Programación Metódica. 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ª edición,1991.
[HoS94] E. Horowitz, S. Sahni. Fundamentals of Data Structures in Pascal. Computer
        Science Press, 4ª edición,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.
[Peñ98] R. Peña. Diseño de Programas (2ª edición). 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ª edición, 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.




                              © Los autores, 2002; © Edicions UPC, 2002.
Índice temático                                                               455
__________________________________________________________________________________



                                                                             2-3, B, B*, B+...........................303
                                                                             AVL.........................................303
                                                                             binario..............................196, 201
                                                                             de búsqueda....................221, 297
                                                                             casi-completo...................213, 233
                                                                             cerrado por prefijo ....................196
                                                                             compacto.................................196
                                                                             completo .................................213
                                                                             enhebrado...............................224
Índice temático                                                              de Fibonacci ............................303
                                                                             equilibrado...............................303
                                                                             etiquetado...............................196
A                                                                            de expansión ...................379, 380
                                                                             de expansión de coste mínimo..380
Abstracción ....................................20,23                        general....................................196
Acción (en Merlí)..................................95                        libre.........................................380
Acoplamiento de estructuras de datos.138                                     n-ario.......................................196
Adyacencia........................................350                        parcialmente ordenado.............233
Álgebra                                                                      con punto de interés.........196, 202
       cociente de términos..................40                              quadtree..................................246
       de términos................................31                         con raíz....................................380
       inicial .........................................40            Arco..................................................346
       objeto matemático ................25, 30                       Aridad
       respecto una signatura ...............30                              de un árbol...............................199
Algoritmo                                                                    de un símbolo............................28
       Brent.......................................288                Arista ..........................................v. arco
       compleción (Knuth-Bendix) ........79                           Ascendente (en un árbol)...................199
       Dijkstra.....................................370               Atajo .................................................138
       Floyd.......................................376                Axioma (especificación ecuacional) .......34
       Kruskal.............................333, 384
       ordenación por inserción ..........122
       ordenación por montículo.........238                           B
       Prim.........................................381
       voraz .......................................381               Basura...............................................178
Altura (de un árbol).............................198                  Biblioteca de módulos reusables...24, 125
Antecesor (en un grafo)......................361                      Bosque.............................................200
Apiñamiento ..............................282, 290                    Búsqueda
       primario....................................283                       auto-organizativa......................255
Apuntador...........................................98                       de caminos mínimos.................369
       de sitio libre................................98                      dicotómica (binaria)...................256
       externo....................................139                        por interpolación ......................256
Árbol ...............................................195                     lineal........................................256




                                           © Los autores, 2002; © Edicions UPC, 2002.
456                                    Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



        con movimiento al inicio ............255                     Coste ...................................v. eficiencia
        por transposición......................255                   Cuadrado (método)............................263
                                                                     Cubeta..............................................258
                                                                     Cursor.................................................98
C

Cadena ...............................v. secuencia                   D
       predicado cadena.....................171
       de reubicación .........................282                   Deducción ecuacional..........................77
Camino                                                               Desbordamiento
       en un árbol...............................198                        en el cálculo.............................262
       de un clave (de dispersión) .......278                               en una tabla .............................274
       en un grafo ..............................350                 Descendiente
       mínimo ....................................369                       en un árbol...............................199
Campo (de tupla)..................................91                        en un grafo ..............................361
Categoría ............................................74             Desequilibrio .....................................305
Ciclo ...............................................351                    DD...................................305, 308
Clave ...............................................249                    DI.....................................307, 310
       indefinida.................................249                Digrafo ............................v. grafo dirigido
       invasora...................................278                Diseño
Colisión.............................................258                    descendente.............................22
Cola                                                                        de estructuras de datos ............397
       circular.....................................159                     modular (con TAD) ......................22
       compartida...............................423                  Dispersión
       prioritaria ..........................231, 237                       concepto.................................258
       TAD.........................................158                      función ............................258, 259
Complejidad..........................v. eficiencia                          incremental..............................274
Componente (fuertemente) conexo....350                                      organizaciones.........................270
Compresión de caminos.....................342                               perfecta...................................260
Conexión (en un grafo).......................350                            valor de dispersión ...................258
Congruencia induida por las ecuaciones39                             División (método)...............................263
Conjunto
       de base .....................................30
       TAD.........................................252               E
Constante
       orden de magnitud ...................116                      Ecuación.............................................34
       valor ..........................................30                   condicional ................................49
Constructor de tipo                                                         impurificadora.............................46
       por enumeración........................91                            parte derecha/izquierda..............35
       puntero ...................................173                       de recurrencia ..........................119
       tupla..........................................91             Eficiencia.....................................23, 108
       vector........................................91                     amortizada ...............................345




                                          © Los autores, 2002; © Edicions UPC, 2002.
Índice temático                                                               457
__________________________________________________________________________________



      en el caso peor..................110, 113                           en Merlí .....................................95
Elemento                                                                  parcial ..............................249, 250
      definido...................................249                      de redispersión........................278
      distinguido...............................162                       de representación....................100
      fantasma (centinela)..................170                           TAD.........................................249
Encadenamiento ...............................168                         total .................................249, 250
Enlace.......................v. encadenamiento                            universal..................................263
Ensayo..............................................278             Funtor.................................................75
Enriquecimiento ..................................67
Especificación .....................................20
      algebraica (ecuacional)..........25, 34                       G
      método de construcción.............47
      parametrizada (genérica).............69                       Género .........................................v. tipo
      pre-post.....................................97               Grado v. aridad
Esquemas de programación ...............131                         Grafo.................................................320
      de búsqueda....................131, 163                             acíclico ....................................351
      de recorrido......................131, 163                          bipartito ...................................346
Estructura de datos..............................25                       completo .................................348
      funcional..................................249                      denso......................................348
      lineal........................................151                   dirigido ....................................346
      de partición..............................332                       disperso ..................................348
Etiqueta.....................................196, 346                     etiquetado...............................346
      de coste nulo...........................369                         no dirigido................................346
Evaluador de expresiones..................399                             no etiquetado ..........................346
Extremidad (de un camino) .................350                            TAD.........................................346



F                                                                   H

Factor                                                              Hermano (en un árbol)........................199
         de carga (árbol).........................219               Hijo (en un árbol)................................199
         de carga (tabla).........................292                      derecho, izquierdo...................202
         de equilibrio.............................304                     izquierdo, hermano derecho.....214
Forma                                                               Hoja ...............................................198
      de un árbol...............................196
      normal .......................................78
Función                                                             I
      de abstracción..........................100
      de Ackerman............................345                    Identificador.......................................249
      de asignación de variables ..........33                       Implementación ...................................20
      de evaluación de términos ..........33                                corrección..................................98
      de dispersión ...................258, 259                             eficiencia .................................108




                                         © Los autores, 2002; © Edicions UPC, 2002.
458                                    Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



         lenguaje de implementación .......98                         Morfismo .............................................32
         universo de implementación..89, 90                           Multilista (de grado dos)......................324
Índice                                                                Multilista de adyacencia ......................358
       a tabla......................................249
       a vector......................................91
Instancia..............................................69             N
       parcial........................................73
Invariante                                                            Nivel (en un árbol) ..............................198
       de un bucle................................93                  Nodo .................................195, 197, 346
       de una representación..............100                         Notación asintótica
Invasor ...........................v. clave invasora                         O .............................................112
Isomorfismo.........................................32                       Ω .............................................112
Iterador..............................................128                    Θ .............................................113
                                                                      Notación infix.....................................400
                                                                      Notació postfix (polaca).......................399
L                                                                     NULO................................................174

liberar_espacio ..................................174
Lista                                                                 O
       de adyacencia..........................355
       auto-organizativa......................255                     Obsolescencia (de atajos)...................142
       circular.....................................186               obtener_espacio ...............................174
       doblemente encadenada..........187                             Ocultación de símbolos........................67
       encadenada.............................143                     Operación ...........................................30
       ordenada.................................161                         auxiliar (oculta, privada) ...............50
       con punto de interés ................162                             consultora..................................46
                                                                            constructora...............................46
                                                                            constructora generadora.............46
M                                                                           modificadora ..............................46
                                                                      Orden de magnitud ............................113
Marca ................................................143
Matriz
       de adyacencia..........................352                     P
       dispersa...................................324
Memoria dinámica.......................174, 405                       Padre (en un árbol).............................199
MFSet...............................................332               Parámetro
Modelo                                                                      de entrada y/o de salida ..............95
       de un TAD............................25, 43                          formal ........................................69
       inicial .........................................37                  real............................................70
Módulo................................................23              Parametrización ...................................69
Montículo ..................................212, 235                  Paso de parámetros .............................70
       de Fibonacci ............................370                   Pila




                                           © Los autores, 2002; © Edicions UPC, 2002.
Índice temático                                                               459
__________________________________________________________________________________



       de sitios libres...................146, 169                        canónico..............................41, 46
       TAD.........................................151                    de clase (de equivalencia).........340
Plegamiento-desplegamiento.............263                          Representación de tipo ..................90, 91
Posición                                                                  encadenada.....................166, 168
       de elemento ............................138                        circular.....................................186
       de vector ...................................91                    doblemente.............................187
Postcondición .....................................97                     secuencial........................154, 166
Precondición.......................................97               Reubicación...............................143, 145
Prioridad............................................231            Reusabilidad..................................41, 46
Programación dinámica.......................376                     Robin Hood (método).........................289
Profundidad (en un árbol) .............v. nivel                     Rotación............................................306
Puntero.............................................173
Punto de acceso (en iterador).............128
                                                                    S

R                                                                   S-aplicación.........................................32
                                                                    S-conjunto ..........................................27
Raíz...........................................195, 198             Secuencia.........................................151
Rama.................................................199            Semántica de un TAD...........................43
Recolección de basura.......................178                            de comportamiento ....................44
Recorrido                                                                  final ...........................................43
       en anchura........219, 228, 361, 364                                inicial .........................................43
       inorden....................................220                      laxa............................................44
       por niveles .......................219, 228                  SIG-álgebra..........................................30
       en ordenación topológica..360, 365                           Signatura.............................................26
       postorden................................220                 Símbolo
       preorden .................................220                       de constante..............................28
       en profundidad ........................360                          de operación..............................28
       en profundidad hacia atrás ........362                       Sinónimo...........................................258
Redispersión.....................................278                Sistema de reescritura..........................78
Reescritura ..................................78, 247                      Canónico...................................79
Referencia colgada ............................177                         Confluente ................................79
Regla de escritura ................................78                      Noetheriano...............................79
Relación                                                            Subárbol....................................195, 199
       binaria (TAD).............................319                Subcamino........................................350
       binaria etiquetada.....................319                   Subciclo............................................351
       de equivalencia (TAD) .......320, 332                        Subgrafo...........................................350
       etiquetada ...............................320                Suma ponderada ...............................261
       de igualdad..............................100
       m:n .................................v. binaria
Renombramiento de símbolos..............68
Representante




                                         © Los autores, 2002; © Edicions UPC, 2002.
460                                    Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



T                                                                           local...........................................95
                                                                      Vector .................................................91
Tabla                                                                 Vértice ..............................................346
      de dispersión...........................258                           intermedio (en un camino).........350
      de símbolos .......................60, 420
      TAD.........................................249
TAD ................v. Tipo Abstracto de Datos                        Z
Teorema ecuacional .............................77
Teoría ecuacional.................................77                  Zona de excedentes..........................274
Término...............................................28              Zona principal ....................................274
      sobre SIG...................................28
Tipo
      auxiliar (oculto, privado)...............50
      de datos...............................19, 25
      de interés ..................................66
Tipo Abstracto de Datos (TAD) ..............19
      abierto.....................................146
      parcialmente abierto .................139
      recorrible .................................128
      recorrible ordenadamente.........128
      totalmente abierto ...........v. abierto
Tupla...................................................91
      variante......................................91



U

Union-find set....................................332
Universo..............................................26
       de caracterización.......................69
       de definición (de especificación) .35
       genérico (parametrizado) ............70
       de implementación ...............89, 90
Uso ...............................................45, 66



V

Valor de dispersión.............................258
Variable ...............................................29
       de control (bucle) .......................93
       global ........................................95




                                           © Los autores, 2002; © Edicions UPC, 2002.
Índice de universos                                                          461
__________________________________________________________________________________



                                                                      COORDENADAS .................................69
                                                                      DIGRAFO_ETIQ .................................349
                                                                      DIGRAFO_ETIQ_LISTAS....................355
                                                                      DIGRAFO_ETIQ_MATRIZ....................353
                                                                      DIGRAFO_ETIQ_MULTILISTAS...........359
Índice de universos
                                                                      DIVISION............................................268
                                                                      DOS_ENTEROS ............................69, 72
ALFABETO..........................................57
                                                                      ELEM ..................................................70
ARBOL_BINARIO...............................203
                                                                      ELEM_= ..............................................71
ARBOL_BINARIO_DE_BUSQUEDA.....30
                                                                      ELEM_< ..............................................76
ARBOL_BINARIO_ENC_1_VECTOR..210
                                                                      ELEM_<_= ........................................130
ARBOL_BINARIO_ENC_PUNTEROS.205
                                                                      ELEM_DISP_CONV...........................266
ARBOL_GENERAL............................201
                                                                      ELEM_2_ESP_= ...............................280
ARBOL_GENERAL_POR_BINARIO ...216
                                                                      ELEM_ESP .......................................251
BOOL ............................................26, 35
                                                                      ELEM_ESP_<_=_+ ...........................369
CADENA........................................57, 76
                                                                      ELEM_ORDENADO...........................332
CJT......................................................70
                                                                      ENTERO..............................................42
CJT_∈ .................................................71
                                                                      FUNCIONES_F ..................................266
CJT_∈_ACOTADO.............................127
                                                                      FUNCIONES_G..................................267
CJT_∈_ACOTADO_IND......................137
                                                                      FUNCION_TOTAL ..............................251
CJT_∈_ACOT._IND_PARC_ABIERTO 141
                                                                      FUNCION_TOTAL_RECO._ORD ........253
CJT_∈_ACOTADO_POR_VECT...99, 127
                                                                      LISTA_INTERES ................................165
CJT_∈_ACOTADO_RECORRIBLE .....129
                                                                      LISTA_INTERES_ENC................172, 182
CJT_∈_ACOT._REC._POR_VECT.....133
                                                                      LISTA_INTERES_ENC_PUNT.....176, 184
CJT_∈_ACOTADO_REC._ORD..........131
                                                                      LISTA_INTERES_SEC .......................166
CJT_∈_ACOT._REC._ORD_VECT_1.134
                                                                      MULTILISTA_TODO_CIRCULAR.........328
CJT_∈_ACOT._REC._ORD_VECT_2.135
                                                                      NAT..........................................27, 45, 52
CJT_RECORRIBLE............................253
                                                                      PAR.....................................................72
CLAVE_DISPERSION ........................268
                                                                      PILA ..................................................153
CLAVE_DISPERSION_LINEAL...........286
                                                                      PILA_SEC .........................................155
CLAVE_REDISPERSIÓN....................280
                                                                      RACIONALES ................................69, 75
COLA ................................................159
                                                                      REDISPERSION_DOBLE...................287
COLA_CIRCULAR..............................161
                                                                      REDISPERSION_LINEAL...................286
COLA_PRIORITARIA..........................232
                                                                      REDISP_LIN._SUMA_POND_Y_DIV...286
COLA_PRIOR._POR_MONTICULO....236
                                                                      REDISP_DOB._SUMA_POND_Y_DIV 287
COMPOSICION_F_Y_G......................268
                                                                      RELACION.........................................322
CONJUNTO .......................................252




                                           © Los autores, 2002; © Edicions UPC, 2002.
462                                    Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________



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




                                       © Los autores, 2002; © Edicions UPC, 2002.

Más contenido relacionado

La actualidad más candente

Pautas de Presentación del Proyecto de Investigación
Pautas de Presentación del  Proyecto de InvestigaciónPautas de Presentación del  Proyecto de Investigación
Pautas de Presentación del Proyecto de InvestigaciónPatricia Ferrer
 
8522107351 pre calculo_2ed
8522107351 pre calculo_2ed8522107351 pre calculo_2ed
8522107351 pre calculo_2edguest7d1c8e9
 
Manual de uti-2010.final
Manual de uti-2010.finalManual de uti-2010.final
Manual de uti-2010.finalJavier Camacho
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-pythonLUIS COAQUIRA
 
Introducción a la programación en c
Introducción a la programación en cIntroducción a la programación en c
Introducción a la programación en cvictdiazm
 
Bricolage manual de aligeramiento de estructuras con poliestireno
Bricolage   manual de aligeramiento de estructuras con poliestirenoBricolage   manual de aligeramiento de estructuras con poliestireno
Bricolage manual de aligeramiento de estructuras con poliestirenoWldr Colquehuanca
 
Manual microsoft office excel 2010
Manual microsoft office excel 2010Manual microsoft office excel 2010
Manual microsoft office excel 2010proneulsa
 
Tecnologia 7º grado
Tecnologia 7º gradoTecnologia 7º grado
Tecnologia 7º gradoSabri Lucania
 
Macros excel
Macros excelMacros excel
Macros excelFraneles
 

La actualidad más candente (14)

Pautas de Presentación del Proyecto de Investigación
Pautas de Presentación del  Proyecto de InvestigaciónPautas de Presentación del  Proyecto de Investigación
Pautas de Presentación del Proyecto de Investigación
 
8522107351 pre calculo_2ed
8522107351 pre calculo_2ed8522107351 pre calculo_2ed
8522107351 pre calculo_2ed
 
Manual de uti-2010.final
Manual de uti-2010.finalManual de uti-2010.final
Manual de uti-2010.final
 
Sql server
Sql serverSql server
Sql server
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
 
Introducción a la programación en c
Introducción a la programación en cIntroducción a la programación en c
Introducción a la programación en c
 
Bricolage manual de aligeramiento de estructuras con poliestireno
Bricolage   manual de aligeramiento de estructuras con poliestirenoBricolage   manual de aligeramiento de estructuras con poliestireno
Bricolage manual de aligeramiento de estructuras con poliestireno
 
Manual microsoft office excel 2010
Manual microsoft office excel 2010Manual microsoft office excel 2010
Manual microsoft office excel 2010
 
Tecnologia 7º grado
Tecnologia 7º gradoTecnologia 7º grado
Tecnologia 7º grado
 
Datos con r
Datos con rDatos con r
Datos con r
 
Proyectos de inversion
Proyectos de inversionProyectos de inversion
Proyectos de inversion
 
Macros excel
Macros excelMacros excel
Macros excel
 
Whatsnew
WhatsnewWhatsnew
Whatsnew
 

Destacado

Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de DatosMaJo2308
 
Clase I Estructura de Datos
Clase I Estructura de Datos Clase I Estructura de Datos
Clase I Estructura de Datos guestc906c2
 
Rebeldía en los adolecentes
Rebeldía en los adolecentesRebeldía en los adolecentes
Rebeldía en los adolecentesCharlie1208
 
Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.xaviercamposm
 
Estructuras de Datos y Algoritmos - Introducción
Estructuras de Datos y Algoritmos - IntroducciónEstructuras de Datos y Algoritmos - Introducción
Estructuras de Datos y Algoritmos - Introducciónrcad
 
La rebeldía de los adolescentes.
La rebeldía de los adolescentes.La rebeldía de los adolescentes.
La rebeldía de los adolescentes.Betsa Ahee
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUrban Skate House
 
Entendiendo estructura de datos
Entendiendo estructura de datosEntendiendo estructura de datos
Entendiendo estructura de datosyacomas
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datosmariajuly
 

Destacado (20)

Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
concepto de estructuras de datos
concepto de estructuras de datosconcepto de estructuras de datos
concepto de estructuras de datos
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Clase I Estructura de Datos
Clase I Estructura de Datos Clase I Estructura de Datos
Clase I Estructura de Datos
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Clase 01
Clase 01Clase 01
Clase 01
 
Estructura de datos
 Estructura de datos Estructura de datos
Estructura de datos
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Tipos de Redes
Tipos de RedesTipos de Redes
Tipos de Redes
 
Rebeldía en los adolecentes
Rebeldía en los adolecentesRebeldía en los adolecentes
Rebeldía en los adolecentes
 
Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.Importancia de las listas Estructura de datos.
Importancia de las listas Estructura de datos.
 
Estructuras de Datos y Algoritmos - Introducción
Estructuras de Datos y Algoritmos - IntroducciónEstructuras de Datos y Algoritmos - Introducción
Estructuras de Datos y Algoritmos - Introducción
 
La rebeldía de los adolescentes.
La rebeldía de los adolescentes.La rebeldía de los adolescentes.
La rebeldía de los adolescentes.
 
Unidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datos
 
Entendiendo estructura de datos
Entendiendo estructura de datosEntendiendo estructura de datos
Entendiendo estructura de datos
 
Rebeldes
RebeldesRebeldes
Rebeldes
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
 
Introducción a Turbo Pascal
Introducción a Turbo PascalIntroducción a Turbo Pascal
Introducción a Turbo Pascal
 

Similar a estructuras de datos

Introduccion poo con_java
Introduccion poo con_javaIntroduccion poo con_java
Introduccion poo con_javaRobert Wolf
 
Algoritmos y programacion_i_-_con_lengua
Algoritmos y programacion_i_-_con_lenguaAlgoritmos y programacion_i_-_con_lengua
Algoritmos y programacion_i_-_con_lenguaDarío Herrera
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaAngel De las Heras
 
Postgres programmer josue
Postgres programmer josuePostgres programmer josue
Postgres programmer josueJosué Ruiz
 
Una guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de ZopeUna guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de ZopeCovantec R.L.
 
15225891 Manual De Integracion V10
15225891 Manual De Integracion V1015225891 Manual De Integracion V10
15225891 Manual De Integracion V10guest1b9f18d3
 
Cómo Diseño puestos de trabajo.pdf
Cómo Diseño puestos de trabajo.pdfCómo Diseño puestos de trabajo.pdf
Cómo Diseño puestos de trabajo.pdfHenryMeja4
 
Fwpa doc-desarrollo
Fwpa doc-desarrolloFwpa doc-desarrollo
Fwpa doc-desarrollociriako
 
Computacion tic integracion
Computacion tic integracionComputacion tic integracion
Computacion tic integracionJhonatan C-l
 
teoria_Simulacion.pdf
teoria_Simulacion.pdfteoria_Simulacion.pdf
teoria_Simulacion.pdfUGMA
 
Bases de-datos
Bases de-datosBases de-datos
Bases de-datossabu47
 

Similar a estructuras de datos (20)

Manual de C
Manual de CManual de C
Manual de C
 
Manual de c# 2
Manual de c# 2Manual de c# 2
Manual de c# 2
 
Introducción a la programación en C
Introducción a la programación en CIntroducción a la programación en C
Introducción a la programación en C
 
Introduccion poo con_java
Introduccion poo con_javaIntroduccion poo con_java
Introduccion poo con_java
 
Algoritmos y programacion_i_-_con_lengua
Algoritmos y programacion_i_-_con_lenguaAlgoritmos y programacion_i_-_con_lengua
Algoritmos y programacion_i_-_con_lengua
 
Hibernate reference
Hibernate referenceHibernate reference
Hibernate reference
 
manual de Usuario Calener.pdf
manual de Usuario Calener.pdfmanual de Usuario Calener.pdf
manual de Usuario Calener.pdf
 
manual de Usuario Calener.pdf
manual de Usuario Calener.pdfmanual de Usuario Calener.pdf
manual de Usuario Calener.pdf
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Manual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuelaManual de programacion_con_robots_para_la_escuela
Manual de programacion_con_robots_para_la_escuela
 
Postgres programmer josue
Postgres programmer josuePostgres programmer josue
Postgres programmer josue
 
Hefesto v2.1
Hefesto v2.1Hefesto v2.1
Hefesto v2.1
 
Una guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de ZopeUna guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de Zope
 
15225891 Manual De Integracion V10
15225891 Manual De Integracion V1015225891 Manual De Integracion V10
15225891 Manual De Integracion V10
 
Cómo Diseño puestos de trabajo.pdf
Cómo Diseño puestos de trabajo.pdfCómo Diseño puestos de trabajo.pdf
Cómo Diseño puestos de trabajo.pdf
 
Fwpa doc-desarrollo
Fwpa doc-desarrolloFwpa doc-desarrollo
Fwpa doc-desarrollo
 
Pensar en cpp
Pensar en cpp Pensar en cpp
Pensar en cpp
 
Computacion tic integracion
Computacion tic integracionComputacion tic integracion
Computacion tic integracion
 
teoria_Simulacion.pdf
teoria_Simulacion.pdfteoria_Simulacion.pdf
teoria_Simulacion.pdf
 
Bases de-datos
Bases de-datosBases de-datos
Bases de-datos
 

estructuras de datos

  • 1. POLITEXT Xavier Franch Gutiérrez Estructuras de datos Especificación, diseño e implementación EDICIONS UPC
  • 2. A mis padres, por todo lo que me han dado A Cristina, por lo que nos espera juntos A Miguel Angel, presente en mis recuerdos
  • 3. Índice 7 __________________________________________________________________________________ Índice Presentación ...........................................................................................................11 Prólogo ....................................................................................................................13 Capítulo 1 Especificación de tipos abstractos de datos Presentación...............................................................................................................19 1.1 Introducción a los tipos abstractos de datos .........................................................19 1.2 Modelo de un tipo abstracto de datos..................................................................25 1.2.1 Signaturas y términos...............................................................................26 1.2.2 Modelos asociados a una signatura...........................................................29 1.2.3 Evaluación de un término dentro de un álgebra .........................................32 1.2.4 Ecuaciones y especificaciones algebraicas................................................34 1.2.5 Modelo inicial de una especificación..........................................................37 1.2.6 Otros modelos posibles ...........................................................................43 1.3 Construcción sistemática de especificaciones......................................................45 1.3.1 Introducción al uso de especificaciones ....................................................45 1.3.2 Clasificación de las operaciones de una especificación...............................46 1.3.3 Método general de construcción de especificaciones................................47 1.4 Ecuaciones condicionales, símbolos auxiliares y errores.......................................48 1.4.1 Ecuaciones condicionales........................................................................48 1.4.2 Tipos y operaciones auxiliares ..................................................................50 1.4.3 Tratamiento de errores.............................................................................51 1.5 Estudio de casos ...............................................................................................53 1.5.1 Especificación de algunos tipos de datos clásicos......................................54 1.5.2 Especificación de una tabla de símbolos ...................................................60 1.5.3 Especificación de un sistema de reservas de vuelos ..................................63 1.6 Estructuración de especificaciones.....................................................................66 1.6.1 Uso de especificaciones ..........................................................................66 1.6.2 Ocultación de símbolos............................................................................67 1.6.3 Renombramiento de símbolos..................................................................68 1.6.4 Parametrización e instanciación ................................................................69 1.6.5 Combinación de los mecanismos..............................................................75 1.7 Ejecución de especificaciones............................................................................76 1.7.1 La deducción ecuacional..........................................................................77 1.7.2 La reescritura...........................................................................................78 Ejercicios ....................................................................................................................80 © Los autores, 2002; © Edicions UPC, 2002.
  • 4. 8 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ Capítulo 2 Implementación de tipos abstractos de datos Presentación...............................................................................................................89 2.1 El lenguaje de implementación ...........................................................................89 2.1.1 Representación de tipos..........................................................................91 2.1.2 Sentencias..............................................................................................93 2.1.3 Funciones y acciones ..............................................................................95 2.1.4 Ejemplo: una implementación para los conjuntos.......................................97 2.2 Corrección de una implementación .....................................................................98 2.3 Estudio de la eficiencia de las implementaciones................................................108 2.3.1 Notaciones asintóticas ...........................................................................111 2.3.2 Órdenes de magnitud más habituales .....................................................116 2.3.3 Análisis asintótico de la eficiencia temporal ..............................................118 2.3.4 Análisis asintótico de la eficiencia espacial ...............................................121 2.4 Conflicto entre eficiencia y modularidad.............................................................124 2.4.1 Falta de funcionalidad en la signatura ......................................................125 2.4.2 Tipos abstractos de datos recorribles ......................................................128 2.4.3 Tipos abstractos de datos abiertos..........................................................136 Ejercicios ..................................................................................................................148 Capítulo 3 Secuencias Presentación.............................................................................................................151 3.1 Pilas................................................................................................................151 3.1.1 Especificación.......................................................................................153 3.1.2 Implementación.....................................................................................154 3.2 Colas...............................................................................................................158 3.2.1 Especificación.......................................................................................158 3.2.2 Implementación.....................................................................................159 3.3 Listas ..............................................................................................................162 3.3.1 Especificación de las listas con punto de interés......................................162 3.3.2 Implementación de las listas con punto de interés....................................166 3.3.3 Implementación de estructuras de datos con punteros.............................173 3.3.4 Transparencia de la representación usando punteros ..............................178 3.3.5 Implementaciones encadenadas y TAD abiertos ......................................186 Ejercicios ..................................................................................................................189 Capítulo 4 Árboles Presentación.............................................................................................................195 4.1 Modelo y especificación ...................................................................................196 4.1.1 Modelo de árbol general.........................................................................196 4.1.2 Modelo de árbol binario..........................................................................201 4.1.3 Modelo de árbol con punto de interés.....................................................202 © Los autores, 2002; © Edicions UPC, 2002.
  • 5. Índice 9 __________________________________________________________________________________ 4.2 Implementación ...............................................................................................204 4.2.1 Implementación de los árboles binarios ...................................................204 4.2.2 Implementación de los árboles generales................................................213 4.2.3 Variaciones en los otros modelos de árboles............................................218 4.2.4 Estudio de eficiencia espacial.................................................................218 4.3 Recorridos.......................................................................................................219 4.3.1 Recorridos en profundidad de los árboles binarios...................................220 4.3.2 Árboles binarios enhebrados..................................................................224 4.3.3 Recorrido por niveles de los árboles binarios ...........................................228 4.4 Colas prioritarias...............................................................................................231 4.4.1 Implementación por árboles parcialmente ordenados y casi completos......233 4.4.2 Aplicación: un algoritmo de ordenación...................................................238 Ejercicios ..................................................................................................................243 Capítulo 5 Tablas Presentación.............................................................................................................249 5.1 Especificación .................................................................................................250 5.1.1 Funciones totales..................................................................................250 5.1.2 Conjuntos.............................................................................................252 5.1.3 Tablas y conjuntos recorribles.................................................................252 5.2 Implementación ...............................................................................................254 5.2.1 Implementación por listas desordenadas.................................................254 5.2.2 Implementación por listas ordenadas.......................................................255 5.2.3 Implementación por vectores de acceso directo.......................................257 5.2.4 Implementación por tablas de dispersión.................................................258 5.3 Funciones de dispersión..................................................................................259 5.3.1 Funciones de traducción de cadenas a enteros.......................................260 5.3.2 Funciones de restricción de un entero en un intervalo .............................263 5.3.3 Funciones de traducción de cadenas a enteros en un intervalo ................265 5.3.4 Caracterización e implementación de las funciones de dispersión.............266 5.4 Organizaciones de las tablas de dispersión........................................................270 5.4.1 Tablas de dispersión encadenadas .........................................................270 5.4.2 Tablas de dispersión de direccionamiento abierto ....................................278 5.4.3 Caracterización e implementación de los métodos de redispersión ...........285 5.4.4 Variantes de las tablas de dispersión de direccionamiento abierto .............288 5.4.5 Tablas dedispersión coalescentes ..........................................................289 5.4.6 Evaluación de las diferentes organizaciones............................................291 5.4.7 Elección de una organización de dispersión............................................292 5.4.8 Las organizaciones de dispersión en tablas recorribles y tablas abiertas.....295 5.4.9 Inconvenientes de la dispersión .............................................................296 5.5 Árboles binarios de búsqueda ..........................................................................297 5.6 Árboles AVL ....................................................................................................303 Ejercicios ..................................................................................................................315 © Los autores, 2002; © Edicions UPC, 2002.
  • 6. 10 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ Capítulo 6 Relaciones binarias y grafos Presentación.............................................................................................................319 6.1 Relaciones binarias ..........................................................................................320 6.1.1 Especificación.......................................................................................320 6.1.2 Implementación.....................................................................................324 6.2 Relaciones de equivalencia ..............................................................................332 6.2.1 Implementaciones lineales .....................................................................335 6.2.2 Implementación arborescente ................................................................340 6.2.3 Compresión de caminos.........................................................................342 6.3 Grafos .............................................................................................................346 6.3.1 Modelo y especificación.........................................................................348 6.3.2 Implementación.....................................................................................352 6.4 Recorridos de grafos........................................................................................360 6.4.1 Recorrido en profundidad ......................................................................361 6.4.2 Recorrido en anchura.............................................................................364 6.4.3 Recorrido en ordenación topológica .......................................................365 6.5 Búsqueda de caminos mínimos ........................................................................369 6.5.1 Camino más corto de un nodo al resto.....................................................370 6.5.2 Camino más corto entre todo par de nodos..............................................376 6.6 Árboles de expansión minimales.......................................................................379 6.6.1 Algoritmo de Prim ..................................................................................381 6.6.2 Algoritmo de Kruskal..............................................................................384 Ejercicios ..................................................................................................................387 Capítulo 7 Uso y diseño de tipos abstractos de datos Presentación.............................................................................................................397 7.1 Uso de tipos abstractos de datos existentes ......................................................398 7.1.1 Un evaluador de expresiones.................................................................399 7.1.2 Un gestor de memoria dinámica ..............................................................405 7.1.3 Un planificador de soluciones.................................................................412 7.2 Diseño de nuevos tipos abstractos de datos......................................................420 7.2.1 Una tabla de símbolos............................................................................420 7.2.2 Una cola compartida...............................................................................423 7.2.3 Una emisora de televisión.......................................................................430 Ejercicios ..................................................................................................................439 Bibliografía ............................................................................................................453 Índice temático .....................................................................................................455 Índice de universos ..............................................................................................461 © Los autores, 2002; © Edicions UPC, 2002.
  • 7. Presentación 11 __________________________________________________________________________________ Presentación Cuando me piden que escriba el prólogo de un libro, me da un poco de vergüenza, ya que se trata de una de mis asignaturas pendientes: he tenido hijos y he plantado árboles, y también he escrito muchas líneas, pero nunca un libro. Así que hacer de prologuista sin haber sido autor me provoca un cierto sentimiento de jubilación anticipada. En este caso, no obstante, este sentimiento se confunde con una fuerte sensación de orgullo y satisfacción, provocada por el excelente trabajo de alguien que, en parte, me permito considerar discípulo mío en el sentido ancestral de la palabra. Xavier Franch, autor de este libro, ha sido alumno mío durante sus estudios en la Facultat d'Informàtica de Barcelona, colaborador becario mientras era estudiante, después alumno de doctorado y compañero de departamento y, para terminar, siempre hemos trabajado juntos en proyectos de investigación y he dirigido su tesis doctoral. Tengo motivos, pues, para sentir esta satisfacción. El texto en cuestión, además de actualizar el contenido de las materias ya clásicas de estructuras de datos, se adapta perfectamente al temario de una asignatura de los planes de estudio vigentes en la Facultat d'Informàtica de Barcelona, lo cual justificaría de por sí su existencia. Pero, además, por su actualización del tema puede servir, total o parcialmente, para otros estudios de informática o para cualquier asignatura sobre estructuras de datos de otros planes de estudios en la Universitat Politècnica de Catalunya o en otras universidades. Y, como valor añadido, es destacable la experiencia del autor en la docencia de la asignatura “Estructuras de Datos y Algoritmos”, de los nuevos planes estudio vigentes en la Facultat d'Informàtica de Barcelona. La notación empleada tanto en las especificaciones como en las implementaciones de las estructuras de datos es Merlí, lenguaje emblemático del proyecto Excalibur y notación que, desde hace ya muchos años, ha caracterizado las diversas enseñanzas algorítmicas en nuestra facultad. Por todo lo dicho es obvio que no soy nada imparcial a la hora de juzgar el trabajo del profesor Xavier Franch, pero también tengo claro que la parcialidad es una pequeña licencia que, en una presentación, nos podemos permitir. © Los autores, 2002; © Edicions UPC, 2002.
  • 8. 12 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ Como ya he dicho, un excelente texto, que pone al día un tema clásico en informática. Mi enhorabuena al autor. Y también al lector, que encontrará una muestra de aquello que el profesor Turski decía hace muchos años: “no hay nada más práctico que una buena teoría”. Sobre todo si se explica desde un conocimiento sólido de la práctica. Pere Botella i López Catedrático del Departamento de Lenguajes y Sistemas Informáticos (U.P.C.) Decano de la Facultat d'Informàtica de Barcelona (U.P.C.) © Los autores, 2002; © Edicions UPC, 2002.
  • 9. Prólogo 13 __________________________________________________________________________________ Prólogo El estudio de las estructuras de datos es casi tan antiguo como el nacimiento de la programación, y se convirtió en un tema capital en este ámbito desde finales de la década de los 60. Como es lógico, una de las consecuencias de este estudio es la aparición de una serie de libros de gran interés sobre el tema, algunos de ellos ciertamente excelentes y que se han convertido en piedras angulares dentro de la ciencia de la programación (citemos, por ejemplo, los textos de D.E. Knuth; de A.V. Aho, J. Hopcroft y J.D. Ullman; de E. Horowitz y D. 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 programación ha dado como resultado la aparición de nuevos conceptos, algunos de los cuales no se han consolidado hasta la segunda mitad de la década de los 80. Muchos de estos conceptos están íntimamente interrelacionados con el ámbito de las estructuras de datos, y ésta es la razón por la cual los libros antes citados han quedado actualmente un poco desfasados en lo que respecta al método de desarrollo de programas que siguen, incluso en sus reediciones más recientes. En este contexto, he confeccionado el libro "Estructuras de datos. Especificación, diseño e implementación", que trata el estudio de las estructuras de datos dentro del marco de los tipos abstractos de datos. La adopción de este enfoque se inscribe en una metodología de desarrollo modular de programas, que abunda en diferentes propiedades interesantes en la producción industrial de aplicaciones (corrección, mantenimiento, etc.), y permite enfatizar diversos aspectos importantes hoy en día: la necesidad de especificar el software, la separación entre la especificación y la implementación, la construcción de bibliotecas de componentes, la reusabilidad del software, etc. Diversos autores han explorado esta metodología (sobre todo, desde las aportaciones de B. Liskov y J.V. Guttag), pero sin aplicarla en el contexto de las estructuras de datos. Destinatario El libro ha sido concebido sobre todo como un texto de ayuda para alumnos de una asignatura típica de estructura de datos en un primer ciclo de ingeniería en informática; también se puede considerar adecuado para cualquier otra titulación técnica superior o media con contenido informático. A tal efecto, cubre el temario habitual de esta asignatura en tono autoexplicativo, y se ilustra con numerosas figuras, especificaciones y programas. © Los autores, 2002; © Edicions UPC, 2002.
  • 10. 14 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ Dependiendo de los objetivos de la asignatura, el formalismo asociado al estudio de estos temas puede ser más o menos acusado; sea como sea, el libro puede usarse como texto básico de consulta. Ahora bien, los temas que aparecen en el libro se han desarrollado con más profundidad que la estrictamente requerida por el alumno y, por ello, hay más posibles destinatarios. Por un lado, el mismo profesor de la asignatura, porque puede encontrar en un único volumen los aspectos de especificación y de diseño que no acostumbran a aparecer en los libros de estructuras de datos; además, la inclusión de especificaciones y de programas libera al docente de la necesidad de detallarlos en sus clases. Por otro lado, cualquier informático que quiera profundizar en el estudio de las estructuras de datos más allá de su aspecto puramente de programación, puede encontrar aquí una primera referencia. Contenido En el primer capítulo se introduce el concepto de tipo abstracto de datos. Después de analizar su repercusión en el diseño de programas, nos centramos en el estudio de su especificación formal, que es la descripción exacta de su comportamiento. De entre las diferentes opciones existentes de especificación formal, se sigue la llamada especificación ecuacional interpretada con semántica inicial. El capítulo muestra un método general para construir especificaciones para los tipos, les otorga un significado matemático (como álgebras heterogéneas) y también estudia su estructuración, y aquí destaca la posibilidad de definir tipos genéricos, profusamente utilizados a lo largo del libro. En el segundo capítulo se estudian diversos aspectos sobre la implementación de los tipos de datos. El proceso de implementación se lleva a cabo cuando existe una especificación para el tipo; la segunda sección insiste precisamente en la relación formal entre los dos conceptos, especificación e implementación. También se introduce un punto clave en el análisis de los algoritmos y las estructuras de datos que se desarrollarán posteriormente: el estudio de su eficiencia a través de las denominadas notaciones asintóticas. Por último, se muestran algunas situaciones de la programación con tipos abstractos de datos que pueden causar problemas de eficiencia, y se formulan algunos patrones de comportamiento para solucionar estos problemas. Las diversas familias de estructuras de datos se introducen en los cuatro capítulos siguientes: se estudian las secuencias; los árboles; las tablas y los conjuntos; y las relaciones binarias y los grafos. Para todas ellas se sigue el mismo método: descripción informal, formulación de un modelo, especificación algebraica del tipo e implementaciones más habituales. Por lo que se refiere a estas últimas, se detalla la representación del tipo y la codificación de las operaciones (hasta el último detalle y buscando la máxima legibilidad posible mediante el uso de funciones auxiliares, diseño descendente, comentarios, etc.), siempre en el caso de implementación en memoria interna; a continuación, se estudia su eficiencia tanto temporal como espacial y se proponen varios ejercicios. © Los autores, 2002; © Edicions UPC, 2002.
  • 11. Prólogo 15 __________________________________________________________________________________ Por último, el capítulo final muestra la integración del concepto de tipo abstracto de datos dentro del desarrollo modular de programas, y lo hace bajo dos vertientes: el uso de los tipos abstractos previamente introducidos y el diseño de nuevos tipos de datos. El estudio se hace a partir de seis ejemplos escogidos cuidadosamente, que muestran la confrontación de los criterios de modularidad y eficiencia en el diseño de programas. Para leer el texto, son necesarios unos conocimientos fundamentales en los campos de las matemáticas, de la lógica y de la programación. De las matemáticas, los conceptos básicos de conjunto, producto cartesiano, relación, función y otros similares. De la lógica, el concepto de predicado, los operadores booleanos y las cuantificaciones universal y existencial. De la programación, 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 (tuplas y vectores), de las estructuras de control de flujo (asignaciones, secuencias, alternativas y bucles) y de los mecanismos de encapsulamiento de código (acciones y funciones). Es importante destacar algunos puntos que el libro no trata, si bien por su temática se podría haber considerado la posibilidad de incluirlos. Primero, no aparecen algunas estructuras de datos especialmente eficientes que, por su complejidad, superan el nivel de una asignatura de primer ciclo de ingeniería; por ejemplo, diversas variantes de montículos y de árboles de búsqueda (Fibonnaci Heaps, Red-Black Trees, Splay Trees, etc.) y de dispersión (Perfect Hashing, principalmente). También se excluyen algunas otras estructuras que se aplican principalmente a la memoria secundaria, como pueden ser las diversas variantes de árboles B y también los esquemas de dispersión incremental (Extendible Hashing, Linear Hashing, etc.). Tampoco se tratan en el libro algunos temas característicos de la programación, como pueden ser el estudio de diversas familias de algoritmos (Greedy Algorithms, Dynamic Programming, etc.) de los cuales constan algunos casos particulares en el capítulo de grafos; o como las técnicas de derivación y de verificación formal de programas, si bien se usan algunos elementos (invariantes de bucles, precondiciones y postcondiciones de funciones, etc.). Hay diversos libros de gran interés que sí tratan en profundidad estos temas, cuyas referencias aparecen convenientemente en este texto. Por último, no se utilizan los conceptos propios de la programación orientada a objetos (básicamente, herencia y vinculación dinámica) para estructurar los tipos de datos formando jerarquías; se ha preferido el enfoque tradicional para simplificar el volúmen de la obra y no vernos obligados a introducir la problemática inherente a este paradigma de la programación. Bibliografía Las referencias bibliográficas del libro se pueden dividir en dos grandes apartados. Por un lado se citan todos aquellos artículos que son de utilidad para temas muy concretos, cuya referencia aparece integrada en el texto en el mismo lugar en que se aplican. Por el otro, hay diversos textos de interés general que cubren uno o más capítulos del libro y que aparecen dentro del apartado de bibliografía; estos libros han de considerarse como los más destacables en la confección de esta obra y no excluye que haya otros, igualmente buenos, © Los autores, 2002; © Edicions UPC, 2002.
  • 12. 16 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ que no se citan, bien porque su temática es muy similar a alguno de los que sí aparecen, bien porque el desarrollo de los temas es diferente al que se sigue aquí. Lenguaje En cualquier texto sobre programación, es fundamental la elección del lenguaje utilizado como vehículo para codificar (y, en este libro, también para especificar) los esquemas que se introducen. En vez de especificar y programar usando algun lenguaje existente, he preferido emplear la notación Merlí, diseñada por diversos miembros del Departament de Llenguatges i Sistemes Informàtics (antiguamente, Departament de Programació) de la Universitat Politècnica de Catalunya. Esta notación ha sido utilizada desde principios de los años 80 por los profesores del departamento en la impartición de las asignaturas de programación de los primeros niveles de las titulaciones en informática y ha demostrado su validez como herramienta para el aprendizaje de la programación. Las razones de esta elección son básicamente dos: por un lado, disponer de una notación abstracta que permita expresar fácilmente los diferentes esquemas que se introducen sin ningún tipo de restricción impuesta por el lenguaje; por otro, usar una sintaxis muy parecida tanto para especificar como para implementar los tipos de datos (el hecho de que el mismo lenguaje se pueda usar desde estos dos niveles diferentes refuerza la relación entre la especificación y la implementación de los tipos de datos, que es uno de los objetivos del texto). El inconveniente principal es la necesidad de traducir las especificaciones y los programas que aparecen en este texto a los lenguajes que el lector tenga a su disposición; ahora bien, este inconveniente no parece muy importante, dado que Merlí es fácilmente traducible a cualquier lenguaje comercial (a algunos mejor que a otros, eso sí), y que podría haber aparecido el mismo problema fuera cual fuera el lenguaje de trabajo elegido. Terminología Dado que, hoy en día, el idioma dominante en el ámbito de la informática es el inglés, he hecho constar las acepciones inglesas junto a aquellos vocablos que denotan conceptos básicos y universalmente aceptados; de esta manera, el lector puede relacionar rápidamente estos conceptos dentro de su conocimiento de la materia o, en el caso de que sea el primer libro que lee sobre estructuras de datos, adquirir el vocabulario básico para la lectura posterior de textos ingleses. Los términos ingleses se escriben siempre en singular independientemente del género con el que se usen en castellano. Por el mismo motivo, se utilizan de manera consciente varios anglicismos usuales en el ámbito de la programación para traducir algunos términos ingleses. Dichos anglicismos se limitan a lo estrictamente imprescindible, pero he creído conveniente seguir la terminología técnica habitual en vez de introducir vocablos más correctos desde el punto de vista linguístico pero no tan profusamente usados. © Los autores, 2002; © Edicions UPC, 2002.
  • 13. Prólogo 17 __________________________________________________________________________________ Agradecimientos Este libro es el resultado de una experiencia personal de varios años de docencia en las asignaturas de estructuras de datos en los planes de licenciatura e ingeniería de la Facultat d'Informàtica de Barcelona de la Universitat Politècnica de Catalunya, por lo que refleja un gran número de comentarios y aportaciones de todos los profesores que, a lo largo de este período, han sido compañeros de asignatura. Quizás el ejemplo más paradigmático sea la colección de ejercicios propuestos en el texto, muchos de ellos provinentes de las listas de ejercicios y exámenes de las asignaturas citadas. Para ellos mi más sincero agradecimiento. En particular, quiero citar al profesor Ricardo Peña por su ayuda durante el primer año que impartí la asignatura "Estructuras de la Información"; a los profesores y profesoras M.T. Abad, J.L. Balcázar, J. Larrosa, J. Marco, C. Martínez, P. Meseguer, T. Moreno, P. Nivela, R. Nieuwenhuis y F. Orejas por la revisión de secciones, versiones preliminares y capítulos enteros del texto y por la detección de errores; y, sobre todo, al profesor Xavier Burgués por todos los años de continuos intercambios de opinión, sugerencias y críticas. A todos ellos, gracias. Contacto El lector interesado puede contactar con el autor en la dirección electrónica franch@lsi.upc.es, o bien dirigiéndose al departamento de Llenguatges i Sistemes Informàtics de la Universitat Politècnica de Catalunya. En especial, el autor agradecerá la notificación de cualquier errata detectada en el texto, así como toda sugerencia o crítica a la obra. También existe una página web con información sobre el libro, que se intenta mantener actualizada, cuya dirección es http://www-lsi.upc.es/~franch/publis/libro-eds.html. Barcelona, 10 de Junio de 1996 (primera edición) 12 de Noviembre de 2001 (última edición) © Los autores, 2002; © Edicions UPC, 2002.
  • 14. Bibliografía 453 __________________________________________________________________________________ Bibliografía [ADJ78] J.A. Goguen, J.W. Thatcher, E.G. Wagner. "An Initial Algebra Approach to the Specification, Correctness and Implementation of Abstract Data Types". En Current 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. Balcázar. Programación Metódica. 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ª edición,1991. [HoS94] E. Horowitz, S. Sahni. Fundamentals of Data Structures in Pascal. Computer Science Press, 4ª edición,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. [Peñ98] R. Peña. Diseño de Programas (2ª edición). 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ª edición, 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. © Los autores, 2002; © Edicions UPC, 2002.
  • 15. Índice temático 455 __________________________________________________________________________________ 2-3, B, B*, B+...........................303 AVL.........................................303 binario..............................196, 201 de búsqueda....................221, 297 casi-completo...................213, 233 cerrado por prefijo ....................196 compacto.................................196 completo .................................213 enhebrado...............................224 Índice temático de Fibonacci ............................303 equilibrado...............................303 etiquetado...............................196 A de expansión ...................379, 380 de expansión de coste mínimo..380 Abstracción ....................................20,23 general....................................196 Acción (en Merlí)..................................95 libre.........................................380 Acoplamiento de estructuras de datos.138 n-ario.......................................196 Adyacencia........................................350 parcialmente ordenado.............233 Álgebra con punto de interés.........196, 202 cociente de términos..................40 quadtree..................................246 de términos................................31 con raíz....................................380 inicial .........................................40 Arco..................................................346 objeto matemático ................25, 30 Aridad respecto una signatura ...............30 de un árbol...............................199 Algoritmo de un símbolo............................28 Brent.......................................288 Arista ..........................................v. arco compleción (Knuth-Bendix) ........79 Ascendente (en un árbol)...................199 Dijkstra.....................................370 Atajo .................................................138 Floyd.......................................376 Axioma (especificación ecuacional) .......34 Kruskal.............................333, 384 ordenación por inserción ..........122 ordenación por montículo.........238 B Prim.........................................381 voraz .......................................381 Basura...............................................178 Altura (de un árbol).............................198 Biblioteca de módulos reusables...24, 125 Antecesor (en un grafo)......................361 Bosque.............................................200 Apiñamiento ..............................282, 290 Búsqueda primario....................................283 auto-organizativa......................255 Apuntador...........................................98 de caminos mínimos.................369 de sitio libre................................98 dicotómica (binaria)...................256 externo....................................139 por interpolación ......................256 Árbol ...............................................195 lineal........................................256 © Los autores, 2002; © Edicions UPC, 2002.
  • 16. 456 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ con movimiento al inicio ............255 Coste ...................................v. eficiencia por transposición......................255 Cuadrado (método)............................263 Cubeta..............................................258 Cursor.................................................98 C Cadena ...............................v. secuencia D predicado cadena.....................171 de reubicación .........................282 Deducción ecuacional..........................77 Camino Desbordamiento en un árbol...............................198 en el cálculo.............................262 de un clave (de dispersión) .......278 en una tabla .............................274 en un grafo ..............................350 Descendiente mínimo ....................................369 en un árbol...............................199 Campo (de tupla)..................................91 en un grafo ..............................361 Categoría ............................................74 Desequilibrio .....................................305 Ciclo ...............................................351 DD...................................305, 308 Clave ...............................................249 DI.....................................307, 310 indefinida.................................249 Digrafo ............................v. grafo dirigido invasora...................................278 Diseño Colisión.............................................258 descendente.............................22 Cola de estructuras de datos ............397 circular.....................................159 modular (con TAD) ......................22 compartida...............................423 Dispersión prioritaria ..........................231, 237 concepto.................................258 TAD.........................................158 función ............................258, 259 Complejidad..........................v. eficiencia incremental..............................274 Componente (fuertemente) conexo....350 organizaciones.........................270 Compresión de caminos.....................342 perfecta...................................260 Conexión (en un grafo).......................350 valor de dispersión ...................258 Congruencia induida por las ecuaciones39 División (método)...............................263 Conjunto de base .....................................30 TAD.........................................252 E Constante orden de magnitud ...................116 Ecuación.............................................34 valor ..........................................30 condicional ................................49 Constructor de tipo impurificadora.............................46 por enumeración........................91 parte derecha/izquierda..............35 puntero ...................................173 de recurrencia ..........................119 tupla..........................................91 Eficiencia.....................................23, 108 vector........................................91 amortizada ...............................345 © Los autores, 2002; © Edicions UPC, 2002.
  • 17. Índice temático 457 __________________________________________________________________________________ en el caso peor..................110, 113 en Merlí .....................................95 Elemento parcial ..............................249, 250 definido...................................249 de redispersión........................278 distinguido...............................162 de representación....................100 fantasma (centinela)..................170 TAD.........................................249 Encadenamiento ...............................168 total .................................249, 250 Enlace.......................v. encadenamiento universal..................................263 Ensayo..............................................278 Funtor.................................................75 Enriquecimiento ..................................67 Especificación .....................................20 algebraica (ecuacional)..........25, 34 G método de construcción.............47 parametrizada (genérica).............69 Género .........................................v. tipo pre-post.....................................97 Grado v. aridad Esquemas de programación ...............131 Grafo.................................................320 de búsqueda....................131, 163 acíclico ....................................351 de recorrido......................131, 163 bipartito ...................................346 Estructura de datos..............................25 completo .................................348 funcional..................................249 denso......................................348 lineal........................................151 dirigido ....................................346 de partición..............................332 disperso ..................................348 Etiqueta.....................................196, 346 etiquetado...............................346 de coste nulo...........................369 no dirigido................................346 Evaluador de expresiones..................399 no etiquetado ..........................346 Extremidad (de un camino) .................350 TAD.........................................346 F H Factor Hermano (en un árbol)........................199 de carga (árbol).........................219 Hijo (en un árbol)................................199 de carga (tabla).........................292 derecho, izquierdo...................202 de equilibrio.............................304 izquierdo, hermano derecho.....214 Forma Hoja ...............................................198 de un árbol...............................196 normal .......................................78 Función I de abstracción..........................100 de Ackerman............................345 Identificador.......................................249 de asignación de variables ..........33 Implementación ...................................20 de evaluación de términos ..........33 corrección..................................98 de dispersión ...................258, 259 eficiencia .................................108 © Los autores, 2002; © Edicions UPC, 2002.
  • 18. 458 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ lenguaje de implementación .......98 Morfismo .............................................32 universo de implementación..89, 90 Multilista (de grado dos)......................324 Índice Multilista de adyacencia ......................358 a tabla......................................249 a vector......................................91 Instancia..............................................69 N parcial........................................73 Invariante Nivel (en un árbol) ..............................198 de un bucle................................93 Nodo .................................195, 197, 346 de una representación..............100 Notación asintótica Invasor ...........................v. clave invasora O .............................................112 Isomorfismo.........................................32 Ω .............................................112 Iterador..............................................128 Θ .............................................113 Notación infix.....................................400 Notació postfix (polaca).......................399 L NULO................................................174 liberar_espacio ..................................174 Lista O de adyacencia..........................355 auto-organizativa......................255 Obsolescencia (de atajos)...................142 circular.....................................186 obtener_espacio ...............................174 doblemente encadenada..........187 Ocultación de símbolos........................67 encadenada.............................143 Operación ...........................................30 ordenada.................................161 auxiliar (oculta, privada) ...............50 con punto de interés ................162 consultora..................................46 constructora...............................46 constructora generadora.............46 M modificadora ..............................46 Orden de magnitud ............................113 Marca ................................................143 Matriz de adyacencia..........................352 P dispersa...................................324 Memoria dinámica.......................174, 405 Padre (en un árbol).............................199 MFSet...............................................332 Parámetro Modelo de entrada y/o de salida ..............95 de un TAD............................25, 43 formal ........................................69 inicial .........................................37 real............................................70 Módulo................................................23 Parametrización ...................................69 Montículo ..................................212, 235 Paso de parámetros .............................70 de Fibonacci ............................370 Pila © Los autores, 2002; © Edicions UPC, 2002.
  • 19. Índice temático 459 __________________________________________________________________________________ de sitios libres...................146, 169 canónico..............................41, 46 TAD.........................................151 de clase (de equivalencia).........340 Plegamiento-desplegamiento.............263 Representación de tipo ..................90, 91 Posición encadenada.....................166, 168 de elemento ............................138 circular.....................................186 de vector ...................................91 doblemente.............................187 Postcondición .....................................97 secuencial........................154, 166 Precondición.......................................97 Reubicación...............................143, 145 Prioridad............................................231 Reusabilidad..................................41, 46 Programación dinámica.......................376 Robin Hood (método).........................289 Profundidad (en un árbol) .............v. nivel Rotación............................................306 Puntero.............................................173 Punto de acceso (en iterador).............128 S R S-aplicación.........................................32 S-conjunto ..........................................27 Raíz...........................................195, 198 Secuencia.........................................151 Rama.................................................199 Semántica de un TAD...........................43 Recolección de basura.......................178 de comportamiento ....................44 Recorrido final ...........................................43 en anchura........219, 228, 361, 364 inicial .........................................43 inorden....................................220 laxa............................................44 por niveles .......................219, 228 SIG-álgebra..........................................30 en ordenación topológica..360, 365 Signatura.............................................26 postorden................................220 Símbolo preorden .................................220 de constante..............................28 en profundidad ........................360 de operación..............................28 en profundidad hacia atrás ........362 Sinónimo...........................................258 Redispersión.....................................278 Sistema de reescritura..........................78 Reescritura ..................................78, 247 Canónico...................................79 Referencia colgada ............................177 Confluente ................................79 Regla de escritura ................................78 Noetheriano...............................79 Relación Subárbol....................................195, 199 binaria (TAD).............................319 Subcamino........................................350 binaria etiquetada.....................319 Subciclo............................................351 de equivalencia (TAD) .......320, 332 Subgrafo...........................................350 etiquetada ...............................320 Suma ponderada ...............................261 de igualdad..............................100 m:n .................................v. binaria Renombramiento de símbolos..............68 Representante © Los autores, 2002; © Edicions UPC, 2002.
  • 20. 460 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ T local...........................................95 Vector .................................................91 Tabla Vértice ..............................................346 de dispersión...........................258 intermedio (en un camino).........350 de símbolos .......................60, 420 TAD.........................................249 TAD ................v. Tipo Abstracto de Datos Z Teorema ecuacional .............................77 Teoría ecuacional.................................77 Zona de excedentes..........................274 Término...............................................28 Zona principal ....................................274 sobre SIG...................................28 Tipo auxiliar (oculto, privado)...............50 de datos...............................19, 25 de interés ..................................66 Tipo Abstracto de Datos (TAD) ..............19 abierto.....................................146 parcialmente abierto .................139 recorrible .................................128 recorrible ordenadamente.........128 totalmente abierto ...........v. abierto Tupla...................................................91 variante......................................91 U Union-find set....................................332 Universo..............................................26 de caracterización.......................69 de definición (de especificación) .35 genérico (parametrizado) ............70 de implementación ...............89, 90 Uso ...............................................45, 66 V Valor de dispersión.............................258 Variable ...............................................29 de control (bucle) .......................93 global ........................................95 © Los autores, 2002; © Edicions UPC, 2002.
  • 21. Índice de universos 461 __________________________________________________________________________________ COORDENADAS .................................69 DIGRAFO_ETIQ .................................349 DIGRAFO_ETIQ_LISTAS....................355 DIGRAFO_ETIQ_MATRIZ....................353 DIGRAFO_ETIQ_MULTILISTAS...........359 Índice de universos DIVISION............................................268 DOS_ENTEROS ............................69, 72 ALFABETO..........................................57 ELEM ..................................................70 ARBOL_BINARIO...............................203 ELEM_= ..............................................71 ARBOL_BINARIO_DE_BUSQUEDA.....30 ELEM_< ..............................................76 ARBOL_BINARIO_ENC_1_VECTOR..210 ELEM_<_= ........................................130 ARBOL_BINARIO_ENC_PUNTEROS.205 ELEM_DISP_CONV...........................266 ARBOL_GENERAL............................201 ELEM_2_ESP_= ...............................280 ARBOL_GENERAL_POR_BINARIO ...216 ELEM_ESP .......................................251 BOOL ............................................26, 35 ELEM_ESP_<_=_+ ...........................369 CADENA........................................57, 76 ELEM_ORDENADO...........................332 CJT......................................................70 ENTERO..............................................42 CJT_∈ .................................................71 FUNCIONES_F ..................................266 CJT_∈_ACOTADO.............................127 FUNCIONES_G..................................267 CJT_∈_ACOTADO_IND......................137 FUNCION_TOTAL ..............................251 CJT_∈_ACOT._IND_PARC_ABIERTO 141 FUNCION_TOTAL_RECO._ORD ........253 CJT_∈_ACOTADO_POR_VECT...99, 127 LISTA_INTERES ................................165 CJT_∈_ACOTADO_RECORRIBLE .....129 LISTA_INTERES_ENC................172, 182 CJT_∈_ACOT._REC._POR_VECT.....133 LISTA_INTERES_ENC_PUNT.....176, 184 CJT_∈_ACOTADO_REC._ORD..........131 LISTA_INTERES_SEC .......................166 CJT_∈_ACOT._REC._ORD_VECT_1.134 MULTILISTA_TODO_CIRCULAR.........328 CJT_∈_ACOT._REC._ORD_VECT_2.135 NAT..........................................27, 45, 52 CJT_RECORRIBLE............................253 PAR.....................................................72 CLAVE_DISPERSION ........................268 PILA ..................................................153 CLAVE_DISPERSION_LINEAL...........286 PILA_SEC .........................................155 CLAVE_REDISPERSIÓN....................280 RACIONALES ................................69, 75 COLA ................................................159 REDISPERSION_DOBLE...................287 COLA_CIRCULAR..............................161 REDISPERSION_LINEAL...................286 COLA_PRIORITARIA..........................232 REDISP_LIN._SUMA_POND_Y_DIV...286 COLA_PRIOR._POR_MONTICULO....236 REDISP_DOB._SUMA_POND_Y_DIV 287 COMPOSICION_F_Y_G......................268 RELACION.........................................322 CONJUNTO .......................................252 © Los autores, 2002; © Edicions UPC, 2002.
  • 22. 462 Estructuras de datos. Especificación, diseño e implementación __________________________________________________________________________________ RELACION_DE_EQUIVALENCIA........335 RELACION_DE_EQUIV._ARB............343 RELACION_DE_EQUIV._LINEAL .......338 RELACION_ETIQUETADA..................323 SUMA_POND ....................................267 SUMA_POND_Y_DIV.........................269 TABLA_DIRECTA ...............................276 TABLA_IND_PUNTEROS...................272 TABLA_ABIERTA ...............................280 VAL_NAT.............................................73 VECTOR............................................157 © Los autores, 2002; © Edicions UPC, 2002.