Está en la página 1de 42

2

Tipos Abstractos
de Datos
o Definiciones
o TAD String
o Concepto de contenedor
o Colecciones e Iteradores
o Relaciones entre elementos
o TAD's contenedores

Estructuras de Datos y Algoritmos, curso 2011/12


Grado en Ingeniería Informática
Universidad de Valladolid
Tipo de Datos

 Conjunto de valores
 .. que pertenecen al Tipo de Datos TAD
 Enumerados o construidos sintácticamente

 Representación de los datos


 Forma en que se almacena en memoria un valor de ese tipo

 Conjunto de operaciones (especificación)


 Operaciones fundamentales que se pueden realizar sobre valores
de ese tipo, y su(s) resultados
 Cada operación tiene una semántica (significado de la operación,
restricciones, etc.) asociada.
 Algoritmos de las operaciones (implementación)
 Manera concreta en que se llevan a cabo las operaciones, dada la
representación proporcionada

César Vaca Rodríguez, Dpto. de Informática, UVa 2
Concepto de tipo abstracto de datos (TAD)

 Tipo abstracto de datos: (TAD)


 Un conjunto de valores y operaciones asociadas
 especificados de manera precisa
 e independiente de la implementación

 Objetivo:
 Separar interfaz (definición operaciones) de implementación
(representación de los datos + algoritmos de las operaciones).

 Notación:
 El estado de un TAD viene dado por la secuencia de operaciones
realizadas sobre él.
 La definición de las operaciones suele darse mediante axiomas y
reglas lógicas.

César Vaca Rodríguez, Dpto. de Informática, UVa 3
Ejemplo de definición de PILA

Definición axiomática (TAD) Definición por código (no TAD)
ESPECIFICACIÓN PILA type
PNodo = ^TNodo;
TAD pila[elemento] TPila = PNodo;
OPERACIONES TNodo = record
Dato : ...;
• crear :  pila Sig : TPila
• esta_vacía : pila  booleano end;
• cima : pila  elemento function cima(P: TPila) : PNodo;
• apilar : pila, elemento  pila begin
• desapilar : pila  pila Result := P
PRECONDICIONES end;
• cima(p)  ¬ esta_vacía(p) procedure apilar(var P: TPila;
• desapilar(p)  ¬ esta_vacía(p) X: PNodo);
begin
ECUACIONES X^.Sig := P; P := X
• esta_vacía( crear ) == T end;
• esta_vacía( apilar(p, x) ) == F procedure desapilar(var P: TPila);
• cima( apilar(p, x) ) == x begin
P := P^.Sig
• desapilar( apilar(p, x) ) == p
end; 4
FIN_ESPECIFICACIÓN
Definición (TADs)

Interfaz (Java)
public interface Pila<E>
{
boolean estaVacia();
E cima();
void apilar(E elem);
void desapilar();
}

Tipos funcionales (Haskell)


class Pila p where
estaVacia :: p a -> Bool;
cima :: p a -> a
apilar :: p a -> a -> p a
desapilar :: p a -> p a

César Vaca Rodríguez, Dpto. de Informática, UVa 5
Implementación (Java)
public class PilaArray<E> implements Pila<E>
{
private E[] vec;
private int tam;
public PilaArray() {
vec = (E[]) new Object[100];
tam = 0;
}
boolean estaVacia() { return tam == 0; }
E cima() { return vec[tam-1]; }
void apilar(E elem) {
if(tam == vec.length) {
Object[] tmp = new Object[2*tam];
System.arraycopy(vec,0,tmp,0,tam-1);
vec = (E[]) tmp;
}
vec[tam++] = elem;
}
void desapilar() { return vec[--tam]; }
}

César Vaca Rodríguez, Dpto. de Informática, UVa 6
Implementación (Haskell)

data MiPila a = PVacia | PNodo a (MiPila a)

instance Pila (MiPila a) where
estaVacia PVacia = True
estaVacia _ = False
cima (PNodo x _) = x
apilar p x = PNodo x p
desapilar (PNodo x p) = p

César Vaca Rodríguez, Dpto. de Informática, UVa 7
TAD Cadena de caracteres (STRING)
Secuencia ordenada de símbolos (caracteres) definidos por un 
determinado alfabeto

 Aunque es posible considerar un STRING como un contenedor de


caracteres, no es el enfoque habitual. En general se consideran como un
tipo simple especial.
 El alfabeto suele definir las reglas de comparación entre cadenas.
 Las operaciones básicas de creación son la concatenación y la extracción,
inserción y búsqueda de subcadenas. El acceso a caracteres individuales
se consideran operaciones secundarias.
 Se pueden clasificar en mutables (es posible modificar el contenido de una
cadena) e inmutables (una vez creadas no se pueden modificar). Es
normal que existan clases para representar ambos tipos.
 Implementaciones:
 Arrays de caracteres (estilo C ó Pascal, capacidad fija o variable)
 Ropes (árboles de subcadenas)
 Tries
 Árboles o arrays de sufijos
César Vaca Rodríguez, Dpto. de Informática, UVa 8
Operaciones básicas del TAD STRING (I)
MUTABLES e INMUTABLES:
 Creación como copia de otro, de un vector de caracteres, literal, etc.
 Comparación con otro STRING
 Búsqueda de una subcadena: Es una operación de gran importancia práctica, y
existen varios algoritmos para realizarla de manera eficiente. Suponiendo que las
cadenas se representan mediante un vector de caracteres, que la cadena tiene
longitud n, y la subcadena longitud m, se muestra la eficiencia de alguno de éstos
algoritmos:
Algoritmo Preproc. Peor caso Promedio Características
"Normal" 0 (n·m) ¿? Mejor caso (n)
Rabin-Karp (m) (n·m) (n+m) Func. dispersión
Knuth-Morris-Prat (m) (n) (n)
Boyer-Moore (m) (n) (n/m)

Otras operaciones relacionadas son:


 Búsqueda de múltiples subcadenas
 Búsqueda de un patrón de subcadena
 Búsqueda de zona con mejor ajuste

César Vaca Rodríguez, Dpto. de Informática, UVa 9
Operaciones básicas del TAD STRING (II)
MUTABLES e INMUTABLES (sigue):
 Es posible mejorar la eficiencia de la búsqueda de una subcadena usando
representaciones más sofisticadas que el vector de caracteres. En
particular, usando árboles de sufijos es posible obtener un tiempo (m)
(independiente del tamaño del texto donde se busca).
 Concatenación: En inmutables, devolver la cadena concatenada. En
mutables, extender la cadena con la otra. Usando listas enlazadas
circulares o ropes es posible realizar ésta operación en O(1).
 Obtención de la subcadena que se encuentra en una determinada posición
y longitud.
 Acceso al carácter i‐ésimo.
MUTABLES sólo:
 Inserción de subcadena en una determinada posición.
 Borrado de un bloque contiguo de la cadena.
 Modificación del carácter i‐ésimo.

César Vaca Rodríguez, Dpto. de Informática, UVa
1
0
Contenedores

 TADs contenedores:
 Almacenan información sobre varios elementos.
 No tienen porqué almacenar “físicamente” a los elementos: pueden
almacenar referencias a ellos y/o información sobre relaciones entre
ellos. Además, es común que los elementos sean "compartidos" por varias
estructuras.

 Criterios de clasificación:
 Los elementos se pueden considerar atómicos o divididos en partes
relevantes.
 Puede imponerse requisitos sobre los elementos o alguna parte de ellos:
 Equivalencia: Poder saber si dos elementos son iguales.
 Comparación: Poder saber si un elemento es mayor o menor que otro.
 Puede permitirse elementos repetidos o no.
 Puede existir una relación (o no) entre los elementos.
 Si existe relación de orden, ésta puede ser externa (decidida por quien
usa la estructura) o interna (determinada por los valores de los
elementos)
César Vaca Rodríguez, Dpto. de Informática, UVa 11
Clasificación de los contenedores básicos
 Contenedores con elementos atómicos:
Contenedor Relación Orden Rep Req
Conjunto Ninguna Azar No =
Lista (indexada) Precedencia Externo Si
Pila Precedencia Externo Si
Cola Precedencia Externo Si
Bicola Precedencia Externo Si
Lista ordenada Precedencia Interno Si 
Cola de prioridad Precedencia Interno Si 

 Contenedores de pares clave‐valor:

Contenedor Relación Orden Rep Req


Mapa Ninguna Azar No =
Diccionario Precedencia Interno No 

César Vaca Rodríguez, Dpto. de Informática, UVa 12
Implementación de contenedores
La inmensa mayoria de las representaciones de contenedores tan sólo
hacen uso de los siguientes elementos básicos de construcción (presentes
o definibles en prácticamente todos los lenguajes imperativos):
 Arrays

 Referencias a elementos:
 Punteros a variables dinámicas
 Referencias a objetos
 Índices a la posición donde se encuentra en un array
 Nombre del fichero y posición dentro de éste en que se encuentra
 Funciones resumen ó dispersión (hash functions):
 Una función que traduce el valor de un elemento a un número,
tipicamente en el rango de los enteros de la máquina.
 No es necesario (ni posible en la mayoría de los casos) que a cada valor de
un elemento se le asigne un número distinto.
 Para ser útiles deben cumplir una serie de requisitos.

César Vaca Rodríguez, Dpto. de Informática, UVa 13
Colecciones e Iteradores (I)
 Actualmente existe una tendencia a organizar las librerias de clases
bajo los conceptos de Colección (Collection) e Iterador (Iterator).
Ejemplo: Java, Python, C#, Eiffel, .NET. Existen lenguajes que
añaden un tipo adicional de bucle, el bucle controlado por iterador.
 Una colección es una fuente de datos (estructura de datos, fichero,
conexión de red, etc.) de la cual se puede obtener un iterador para
acceder a sus datos.
 Un iterador es un mecanismo que permite acceder a un elemento
(el elemento actual) y pasar al siguiente (dependiendo del tipo de
iterador es posible que se permitan más operaciones).
 Tipicamente el concepto de colección se representa mediante una
clase abstracta o interfaz de la que heredan/implementan aquellas
clases que pueden servir de fuente de datos.

César Vaca Rodríguez, Dpto. de Informática, UVa 14
Colecciones e Iteradores (II)
 El iterador se representa por una clase/interfaz con las operaciones
de acceso y paso al siguiente. Suelen existir clases iteradoras con
más operaciones disponibles, que heredan del iterador general.
 El objetivo es proporcionar un mecanismo uniforme de acceso a
cualquier fuente de datos (colección).
 Las operaciones básicas de un iterador son:
 Comprobar si quedan más elementos por recorrer
 Acceder al elemento actual
 Pasar al elemento siguiente
 Borrar el elemento actual

 Si la colección es una lista (indexada), los iteradores suelen


disponer de operaciones adicionales:
 Inserción de un elemento antes o despues del elemento actual

 Supondremos que todos los TADs estudiados disponen de


iteradores que permiten recorrer sus elementos.

César Vaca Rodríguez, Dpto. de Informática, UVa 15
Contenedores principales ‐ Conjunto
Colección de valores sin un orden definido en la que no se 
permiten elementos repetidos

 Los conjuntos se utilizan para clasificar valores en dos categorías: Los que
pertenecen al conjunto y los que no pertenecen a él.
 Las operaciones básicas son:
 Pertenencia: Comprobar si un valor pertenece al conjunto.
 Inclusión: Hacer que un valor pertenezca al conjunto.
 Exclusión: Hacer que un valor no pertenezca al conjunto.
 También pueden ser importantes las operaciones de combinación de conjuntos:
unión, intersección, diferencia.
 El recorrido de los elementos de un conjunto no garantiza ningún orden en
particular.
 Existen muchas posibilidades respecto a la implementación:
 Arrays de bits indexados por valor.
 Tablas de dispersión (Hash tables)
 Contigua lineal (arrays de valores), ya sea desordenados u ordenados.
 Árboles binarios equilibrados (Árboles AVL, Red‐Black Trees, etc.)
 Opciones exóticas: Tries, Bloom filter, Van Emde Boas Tree.
César Vaca Rodríguez, Dpto. de Informática, UVa 16
Contenedores principales ‐ Lista
Colección ordenada de entidades
 A diferencia de los conjuntos, en las listas existe una relación de orden
impuesta a los elementos, y se permiten elementos repetidos. Si el orden
es interno hablamos de Listas ordenadas.
 El orden permite asociar los elementos con un conjunto de índices.
 Existen muchas variantes que difieren en las restricciones que
impongamos a las operaciones de acceso, inserción y borrado:
 Los iteradores de lista permiten señalar un elemento ó posición en la lista
(cursor), en base al cual se realizan todas las operaciones. Tambien se permite
cambiar el cursor (pasar a siguiente y/o anterior).
 Las listas indexadas permiten realizar las operaciones indicando el índice del
elemento.
 Las pilas, colas y bicolas sólo permiten realizar operaciones sobre los
elementos extremos.
 En las listas ordenadas el elemento con índice i es el i‐ésimo menor.
 Las colas de prioridad son un caso especial de lista ordenada en que las
operaciones se restringen a un extremo (el elem. mínimo o máximo)

César Vaca Rodríguez, Dpto. de Informática, UVa
17
Contenedores principales ‐ Lista

IMPLEMENTACIONES
 Listas (orden externo): Listas indexadas, secuenciales, pilas, colas,
bicolas. Dependiendo de la variante concreta, y de las operaciones más
relevantes para el problema, se usarán alguna de las siguientes
implementaciones:
 Contigua lineal, contigua circular (arrays)
 Listas enlazadas (lineales|circulares, simples|dobles)
 Listas ordenadas (orden interno)
 Contigua lineal ordenada (arrays)
 Árboles binarios de búsqueda (ABB)
 ABB equilibrados (Árboles AVL, Árboles B, Red‐Black Trees, ..)
 Otras opciones: Skip Lists, Splay Trees
 Colas de prioridad
 Montículos binarios (binary heap)
 Otros montículos: Binomiales, Fibonacci
 Treaps
César Vaca Rodríguez, Dpto. de Informática, UVa 18
Contenedores principales ‐ Mapa
TAD compuesto por un conjunto de claves y una colección de 
valores donde cada clave tiene asociado un valor

 Un mapa (associative array, map, lookup table) es una generalización del


concepto de conjunto, en la cual cada elemento que pertenece al conjunto
(denominado clave) tiene asociado un valor.
 Los elementos del mapa son pares (clave, valor)
 No pueden existir claves repetidas. Sin embargo si que pueden existir
valores repetidos.
 Los elementos se localizan mediante su clave.
 Las implementaciones principales suelen ser las mismas que las de los
conjuntos, adaptadas al hecho de que ahora deben almacenar el valor
asociado a la clave.
 Las claves no necesitan tener una relación de orden definida entre ellas.
 Los iteradores sobre mapas no suelen garantizar el orden por el que se
pasa por los elementos.

César Vaca Rodríguez, Dpto. de Informática, UVa 19
Contenedores principales ‐ Diccionario
Un Diccionario es un Mapa donde se define un orden interno 
sobre las claves (forman una lista ordenada) 

 Un directorio es una generalización del concepto de lista ordenada, en la


cual cada elemento que pertenece a la lista (denominado clave) tiene
asociado un valor, y se añade la restricción de que no pueden existir claves
repetidas.
 Los elementos del diccionario, como en el mapa, son pares (clave, valor)
 Los iteradores sobre diccionarios recorren los elementos en el orden
interno de las claves.
 Se dispone de las operaciones asociadas al TAD mapa (acceso, inserción y
borrado basado en clave) y (opcionalmente) de las del TAD lista ordenada
(acceso y borrado al i‐ésimo menor).
 Las implementaciones suelen ser las mismas que las del TAD lista
ordenada, en ocasiones complementadas con tablas de dispersión

César Vaca Rodríguez, Dpto. de Informática, UVa 20
Relación de precedencia u orden
1 2 n
x …
primero predecesor(x) sucesor(x) último

 Existe una relación de orden total sobre los elementos.


 Existen dos elementos extremos: El primero y el último.
 Todo elemento (salvo el primero) tiene un único elemento
predecesor.
 Todo elemento (salvo el último) tiene un único elemento sucesor.
 Se pueden realizar operaciones basadas en la posición de los
elementos:
o Sobre algún extremo.
o Sobre el predecesor o sucesor del elemento actual.
o Asignando un índice a cada elemento.
 El orden puede ser interno (basado en el valor del elemento o de una
parte suya) u externo (impuesto por las operaciones de inserción y
borrado)
César Vaca Rodríguez, Dpto. de Informática, UVa 21
Relación de parentesco o jerarquía (árbol)

raiz
 Los elementos se relacionan con una
estructura jerárquica (tipo arbol)
padre de x  Hay un elemento distinguido, el raiz, y los
demas se particionan en subárboles, y así
recursivamente.
 Cada elemento (excepto el raiz) tiene un padre
x
(superior) y cero o más hijos (subordinados).
 Permite representar elementos con una
estructura jerárquica (más compleja y flexible
hijos de x que la relación de orden).
 A diferencia de la relación de orden, no existe
una única forma distinguida de recorrer los
elementos, sino varias: preorden, inorden,
postorden y por niveles.
 Si se impone un orden interno la relación
puede servir como una representación
(montículos, arboles binarios de búsqueda,
etc.) útil para varios TADs

César Vaca Rodríguez, Dpto. de Informática, UVa 22
Relación de vecindad (grafo)

vecinos de x
 No existen restricciones respecto a la forma de
relacionar unos elementos con otros.
 Cada elemento puede estar relacionado con 0 o
más elementos, sus vecinos.
x
 No existe nigún elemento distinguido.
 No hay recorridos distinguidos, tan sólo la
posibilidad de elegir un nodo y recorrer en
profundidad o en anchura.
 Las relaciones entre elementos pueden ser (o
no) direccionales y suelen llevar información
asociada.

César Vaca Rodríguez, Dpto. de Informática, UVa 23
Clasificación operaciones básicas
• Pertenencia
Elemento
• Recuento
por Valor
• Dato asociado
Clave
• Lista elementos
asociados a clave
Acceso Índice Resultado del
• Cabeza acceso
ó por Posición Extremo
• Cola
Borrado Iterador de lista

i‐ésimo Menor
por Orden • Mínimo
Extremo
• Máximo

según Valor (sin argumentos)


• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice
• antes
Cursor
• después
César Vaca Rodríguez, Dpto. de Informática, UVa 24
Conjunto (Set)
• Pertenencia
Elemento  Sin relación
• Recuento
por Valor  Elementos atómicos
• Dato asociado
Clave
• Lista elementos  Req: Equivalencia
asociados a clave
 Sin elementos repetidos
Acceso Índice
• Cabeza
ó por Posición Extremo
• Cola
 Otras operaciones:

Borrado Iterador de lista  Unión

i-ésimo Menor
 Recorrido
por Orden • Mínimo
Extremo
• Máximo

según Valor (sin argumentos)

• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa 25
Mapa (Associative array, Lookup table, Map, Index)
• Pertenencia
Elemento  Sin relación
• Recuento
por Valor  Elementos son pares
• Dato asociado
Clave clave - dato
• Lista elementos
asociados a clave  Req: Equivalencia claves
Acceso Índice
 Sin claves repetidas
• Cabeza
ó por Posición Extremo
• Cola  Otras operaciones:
Borrado Iterador de lista
 Modificar dato
i-ésimo Menor
por Orden  Usos:
• Mínimo
Extremo
• Máximo  Lenguajes Awk, Perl,
JavaScript, PHP

según Valor (sin argumentos)

• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa 26
Lista indexada (List)
• Pertenencia
Elemento  Relación Orden Externo
• Recuento
por Valor  Elementos atómicos
• Dato asociado
Clave
• Lista elementos  Req: Ninguno
asociados a clave
 Elementos repetidos
Acceso Índice
• Cabeza
ó por Posición Extremo
• Cola
 Otras operaciones:

Borrado Iterador de lista  Concatenación

i-ésimo Menor
 Recorrido
por Orden • Mínimo  Búsqueda
Extremo
• Máximo
 Ordenación

según Valor (sin argumentos)

• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice Iterador de lista
• antes
Cursor
•• después
después

César Vaca Rodríguez, Dpto. de Informática, UVa 27
Pila (Stack)
• Pertenencia
Elemento  Relación Orden Externo
• Recuento
por Valor  Elementos atómicos
• Dato asociado
Clave
• Lista elementos  Req: Ninguno
asociados a clave
 Elementos repetidos
Acceso Índice
• Cabeza
ó por Posición Extremo
• Cola
 Estructura LIFO (Last In,
First Out)
Borrado Iterador de lista
 Usos:
i-ésimo Menor
por Orden  Gestión memoria
• Mínimo
Extremo  Recursivo  Iterativo
• Máximo
 Traducción expr.
matemáticas
según Valor (sin argumentos)
 Lenguages FORTH,
• en Cabeza
Inserción Extremo
• en Cola
Postscript, Java VM

en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa
28
Cola (Queue)
• Pertenencia
Elemento  Relación Orden Externo
• Recuento
por Valor  Elementos atómicos
• Dato asociado
Clave
• Lista elementos  Req: Ninguno
asociados a clave
 Elementos repetidos
Acceso Índice
• Cabeza
ó por Posición Extremo
• Cola
 Estructura FIFO (First In,
First Out)
Borrado Iterador de lista
 Usos:
i-ésimo Menor
por Orden  Buffers
• Mínimo
Extremo  Algoritmos recorrido
• Máximo
en anchura en árboles
y grafos.
según Valor (sin argumentos)

• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa 29
Bicola (Deque)
• Pertenencia
Elemento  Relación Orden Externo
• Recuento
por Valor  Elementos atómicos
• Dato asociado
Clave
• Lista elementos  Req: Ninguno
asociados a clave
 Elementos repetidos
Acceso Índice
• Cabeza
ó por Posición Extremo
• Cola
 Usos:

Borrado Iterador de lista


 Buffers
 Algoritmos recorrido
i-ésimo Menor en anchura en árboles
por Orden • Mínimo y grafos.
Extremo
• Máximo

según Valor (sin argumentos)

• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa 30
Lista ordenada (Sorted List)
• Pertenencia
Elemento  Relación Orden Interno
• Recuento
por Valor  Elementos atómicos
• Dato asociado
Clave
• Lista elementos  Req: Comparación
asociados a clave
 Elementos repetidos
Acceso Índice
• Cabeza
ó por Posición Extremo
• Cola
 Otras operaciones:

Borrado Iterador de lista  Fusión

i-ésimo Menor
 Recorrido
por Orden • Mínimo  Búsqueda
Extremo
• Máximo

según Valor (sin argumentos)

• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa 31
Cola de prioridad (Priority queue)
• Pertenencia
Elemento  Relación Orden Interno
• Recuento
por Valor  Elementos son pares
• Dato asociado
Clave prioridad - dato
• Lista elementos
asociados a clave  Req: Comparación
Acceso Índice
 Variante: Cola de
• Cabeza
ó por Posición Extremo
• Cola
prioridad de máximos
Borrado Iterador de lista  Otras operaciones:
i-ésimo Menor  Modificar prioridad
por Orden • Mínimo
Extremo  Fusión
• Máximo
 Usos:

según Valor (sin argumentos)  Gestión procesos


• en Cabeza  Ord. Montículos
Inserción Extremo
• en Cola  Alg. Dijkstra
en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa 32
Diccionario (Map, Dictionary)
• Pertenencia
Elemento  Mapa + Orden Interno en
• Recuento
por Valor claves
• Dato asociado
Clave  Elementos son pares
• Lista elementos
asociados a clave
clave - dato

Acceso Índice  Req: Comparación claves


• Cabeza
ó por Posición Extremo
• Cola
 Otras operaciones:
Borrado Iterador de lista  Recorrido ordenado
basado en iterador
i-ésimo Menor
por Orden • Mínimo  Modificación dato
Extremo
• Máximo  Usos: BD Relacionales

según Valor (sin argumentos)

• en Cabeza
Inserción Extremo
• en Cola
en Posición Índice
• antes
Cursor
• después

César Vaca Rodríguez, Dpto. de Informática, UVa 33
Directorio (General Tree, Directory)
 Un directorio representa una colección de
elementos con una relación de jerarquía entre
ellos. Ejemplo típico: Sistema de ficheros (SF).

 Es habitual que los elementos hojas se interpreten


o contengan información distinta a la del resto de
elementos (En un SF las hojas serían ficheros y los
nodos internos directorios).

 Las operaciones de acceso suelen basarse en


cursor: Hay un elemento distinguido y se puede
acceder a su padre y sus hijos. (En un SF el
directorio actual).
 Las implementaciones más habituales son las enlazadas, en particular
la implementación padre-hijo-hermano.
 Atención: La palabra "arbol" puede usarse con dos significados
distintos:
 Un TAD con relación de jerarquía: El TAD Directorio
 Una representación (montículo, ABB, árbol AVL, etc.) útil para algunos TADs
(como por ejemplo el TAD Conjunto, TAD Tabla, etc.)

César Vaca Rodríguez, Dpto. de Informática, UVa 34
Grafo (Graph)
 Un grafo representa una colección de elementos
(vértices) sobre los que existe una relación de
vecindad definida por un conjunto de aristas.

 Ejemplo típico: World Wide Web  Colección de


páginas web relacionadas entre sí por los
hipervínculos de una página a otra.

 Las operaciones habituales son la inserción y


borrado de aristas, inserción y borrado de nodos,
los recorridos y operaciones más especializadas
(camino mínimo, etc.)

 Las implementaciones mas comunes son:


 Listas de adyacencia

 Matriz de adyacencia

César Vaca Rodríguez, Dpto. de Informática, UVa 35
Otros TADs (I)
 TAD MultiConjunto (Bag, Multiset): Un conjunto en el que se permiten
elementos repetidos.
 La operación de acceso (pertenencia) devuelve un valor entero (en vez de un
booleano), el número de veces que aparece ese valor en el multiconjunto.

 La operación de borrado disminuye en uno el número de veces que aparece ese


valor en el multiconjunto

 TAD MultiDiccionario: Un diccionario en el que se pueden asociar


múltiples valores (no solo uno) a cada clave.
 La operación de acceso por clave devuelve una lista de valores.

 La ínserción de un par (clave, valor) añade un nuevo valor a la lista de valores


asociados a la clave. En un diccionario esta operación reemplaza el valor
asociado a la clave en el caso de que ya existiera una asociación para esa clave
concreta.

 La operación de borrado debe incluir un parámetro adicional para seleccionar


el valor concreto, de entre los asociados a la clave, que se debe borrar.

César Vaca Rodríguez, Dpto. de Informática, UVa 36
Otros TADs (II)
 TAD Array ó TAD Vector: Operaciones de acceso por indice y reemplazar
elemento (también por indice).

 TAD Disjoint‐Set: Representa elementos clasificados en categorías (una


serie de conjuntos disjuntos, donde cada elemento sólo pertenece a un
solo conjunto), de manera que se establece una partición sobre ellos.

A priori este tipo de información se podría representar mediante un TAD


diccionario (las claves serían las categorías y los valores los elementos, en
este caso sin repetición), pero aquí la intención es simplificarlo de manera
que:
 Cada categoría (conjunto) se represente no de manera explícita sino mediante
un elemento cualquiera que pertenezca a ella (representante)
 Las únicas operaciones fundamentales sean:
 Creación a partir de una colección de elementos (cada elemento define una
categoría)
 Búsqueda (Find): Determinar a que categoría pertenece un elemento (se
devuelve un representante de esa categoría)
 Union: Unir dos categorías en una sola.

César Vaca Rodríguez, Dpto. de Informática, UVa 37
Collections en Java

Collection HashSet

LinkedHashSet
Set
EnumSet
SortedSet
TreeSet
NavigableSet

ArrayList
List
Stack
Queue
PriorityQueue
DQueue
ArrayDQueue

LinkedList

César Vaca Rodríguez, Dpto. de Informática, UVa 38
Collections en Java

Collection SortedSet NavigableSet


+ contains(elem) + first() + ceiling(elem)
+ add(elem) + last() + higher(elem)
+ remove(elem) + comparator() + floor(elem)
+ iterator() + subset(e1, e2) + lower(elem)
+ toArray()

List Queue DQueue

+ get(index) + element() + getFirst()


+ set(index, elem) + add(elem) + getLast()
+ indexOf(elem) + remove() + addFirst(elem)
+ add(index, elem) + addLast(elem)
+ remove(index) + removeFirst()
+ listIterator() PriorityQueue + removeLast() Stack
+ sublist(i1, i2)
+ peek() + peek()
+ add(elem) + push(elem)
+ poll() + pop()

César Vaca Rodríguez, Dpto. de Informática, UVa 39
Collections en Java

HashMap

Map LinkedHashMap

EnumMap
SortedMap

NavigableMap TreeMap

César Vaca Rodríguez, Dpto. de Informática, UVa 40
Collections en Java

Map SortedMap NavigableMap


+ get(clave) + firstKey() + ceilingKey()
+ put(clave, valor) + lastKey() + higherKey()
+ remove(clave) + comparator() + floorKey()
+ keySet() + subMap(k1, k2) + lowerKey()
+ values()

Iterator ListIterator
Collections (static)
+ hasNext() + add(elem)
+ binarySearch(lista, elem, comp) + next() + set(elem)
+ indexOfSublist(lista1, lista2) + remove() + hasPrevious()
+ min(colección, comp) + previous()
+ max(colección, comp)
+ reverse(lista)
+ rotate(lista, dis) Comparator
+ shuffle(lista)
+ sort(lista, comp) + compare(elem1, elem2)
+ equals(elem)

César Vaca Rodríguez, Dpto. de Informática, UVa 41
C++ Standard Template Library (STL)

• Sequences

Classes vector list deque

Adaptors stack queue priority_queue

• Associative containers
Sorted Hashed
Simple Múltiple Simple Múltiple

Unique set multiset hash_set hash_multiset

Pair map multimap hash_map hash_multimap

César Vaca Rodríguez, Dpto. de Informática, UVa 42

También podría gustarte