Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1.
Los programas manejan informacin para realizar su cometido. Esa informacin viene en la forma de
datos, es decir, unidades elementales, que pueden transmitirse, manipularse, crearse o eliminarse
de forma atmica.
Una Estructura de Datos consiste en una forma particular de almacenar y organizar informacin en
Curso 2.016 EPED
Pgina 1 de 19
Por lo tanto, una estructura de datos tendr en cuenta la capacidad de un ordenador para almacenar
datos en su memoria de manera que sean accesibles mediante sus direcciones.
Existen dos formas principales de almacenamiento, dependiendo de la interpretacin que se d al
dato guardado: datos del programa o direcciones que permitan acceder a datos del programa.
Por ejemplo, un registro o array permiten el acceso a sus datos individuales mediante operaciones
aritmticas sobre su direccin conocido el tamao de cada uno de sus datos.
Una lista enlazada almacenar, sin embargo, direcciones (de sus datos) como valores.
2.
En esta seccin vamos a introducir conceptos importantes que subyacen y dan soporte al resto del
material de esta asignatura as como a la Programacin en general. Veremos cul es la utilidad de las
estructuras de datos y sus generalizaciones, estudiaremos algunas de las principales familias de Tipos
Abstractos de Datos (TAD), aprenderemos a definirlos, a implementarlos y a discernir sus usos
posibles a partir de sus usos conocidos.
2.1.
Pgina 2 de 19
Constructoras: crean trminos nuevos del tipo (estructura vaca, aadir elementos).
Consultoras: permiten acceder los trminos del tipo y examinar sus valores (consultar el
estado de la instancia del TAD). Habitualmente devuelven trminos de otro tipo.
o Predicados: son consultoras que devuelven valores lgicos o booleanos, es decir, que
comprueban ciertas propiedades.
2.2.
Cuando nos referimos a TAD o familias de los mismos, pensamos en su semntica comn, es decir,
en TAD que aparecen recurrentemente en la solucin a problemas de programacin. A continuacin,
ofrecemos una clasificacin de TAD en cuanto a la relacin que guardan unos con otros y en base a
las restricciones que diferencialmente explican la existencia de unos TAD a partir de otros. Daremos,
adems, al final y a modo de resumen, una clasificacin de las principales familias de TAD (en especial,
las que se estudian en el curso) con algunas de sus caractersticas principales (en el apndice A, vase
Curso 2.016 EPED
Pgina 3 de 19
Grafo
equivalencia
orden parcial
Particin
Grafo Dirigido
Acclico
orden jerrquico
rbol
Lista
especializacin
Cadena (car)
Pila
Deque
especializacin
especializacin
Cola de
prioridad
Cola.
.
.
.
.
2.3.
Un TAD viene definido por sus operaciones y los efectos que stas tienen, es decir, qu trminos (del
lgebra) producen. As pues, para definir un TAD, es preciso decidir su conjunto de valores posibles
as como su conjunto de operaciones que manipulan dichos valores.
Ms adelante, entre esas operaciones se definir un conjunto de restricciones, lo que configurar
unos usos admisibles del TAD (qu valores pueden producirse o pertenecen al mismo y en qu
circunstancias). En la prctica, esos usos determinan la utilidad del TAD para adaptarse a la solucin
de situaciones concretas en cuanto a necesidades de manejo de informacin.
Cualquier implementacin de un TAD deber respetar esta definicin como si se tratase de un
contrato. La escritura de dicho contrato comienza por la especificacin del TAD.
Especificacin de un TAD
Un TAD viene especificado por la definicin de sus operaciones. Las operaciones de un TAD deben
especificarse, lo que consiste en decidir:
Sus nombres y parmetros (tanto de entrada como de salida). Esta parte se llama perfil o
firma de las operaciones. El conjunto de perfiles de todas las operaciones se conoce como
perfil del tipo (o interfaz del tipo, tambin llamado API, por sus siglas inglesas).
Pgina 4 de 19
Sus efectos (es decir, qu resultado producen a partir de sus datos de entrada). Estas
especificaciones pueden ser formales (por ejemplo, ecuacionales) o informales pero deben
ser precisas, es decir, interpretables de forma inambigua. Normalmente, esto se realiza
determinando sus pre y postcondiciones.
Para cada uno de los TAD que se van a estudiar en el curso, se dar una interfaz (API) que
seguiremos obligatoriamente para el uso de dicho TAD. Esta API representa un contrato, es
decir, cualquier clase que implemente el TAD al que representa deber implementar todas
sus operaciones (mtodos).
Dichas clases podrn incorporar nuevos mtodos pblicos a su interfaz siempre que stos se
definan e implementen.
2.4.
La implementacin es una parte (una fase) fundamental de un TAD, ya que permite su utilizacin en
programas reales.
Para realizarla, se debe, a partir de la especificacin completa de las operaciones (as como de la
seleccin de los valores del tipo):
Elegir una representacin para el tipo en funcin de otros tipos previamente existentes (sean
predefinidos en el lenguaje o definidos por el usuario, como los TAD).
Para dicha representacin, debern implementarse las distintas operaciones. En esta etapa,
puede suceder que se descubra una necesidad de modificar el perfil de alguna operacin (por
ejemplo, aadir parmetros necesarios) o, incluso, aadir nuevas operaciones utilitarias.
Ntese que la implementacin de las operaciones debe cumplir el contrato de las mismas y
las restricciones sobre los valores del tipo. De hecho, cualquier representacin de un tipo
deber conservar en todo momento una propiedad (definible formalmente) denominada el
invariante de la representacin, que describe qu y como se conserva (la propiedad que hace
que esa representacin lo sea de dicho TAD).
Pgina 5 de 19
3.
Colecciones y Conjuntos
Colecciones y conjuntos son los tipos abstractos de datos ms bsicos en tanto en cuanto no imponen
restricciones adicionales a sus elementos. En ambos contenedores, existen dos variantes: aquella en
la que pueden existir varios elementos con el mismo valor (habitualmente se habla de bolsas o
multiconjuntos) y aquella en la que cada elemento puede aparecer slo una vez.
3.1.
Colecciones
Las colecciones son compilaciones o compendios de valores que estn relacionados entre s de
alguna manera (la ms simple consiste en el hecho de pertenecer a la coleccin). Es decir, son
contenedores bsicos de elementos que comparten el hecho de carecer de organizacin. Este TAD
no impone restricciones adicionales a sus elementos. En una coleccin, es relevante la pertenencia
(formar parte de la misma). A partir del TAD Coleccin mediante la inclusin de restricciones,
derivaremos los dems TAD (vase la Figura 1, en la pgina 4).
API de Colecciones: CollectionIF
La siguiente interfaz define las operaciones del TAD Coleccin:
/* Representa una coleccin de elementos. Una coleccin no
* tiene orden.
* Los smbolos precedidos de \ pueden encontrarse en la URL
* http://web.ift.uib.no/Teori/KURS/WRK/TeX/symALL.html y se
* corresponden con los smbolos matemticos habituales.
public interface CollectionIF<E> {
*
*
*
*
*/
*
*/
*
*/
*
*/
*
*
*/
*/
*
*
*/
Pgina 6 de 19
3.2.
Conjuntos
El TAD Conjunto se corresponde con el modelo matemtico de conjunto finito, es decir, una serie
finita de elementos que pueden aparecer una sola vez.
API de Conjunto: SetIF
La siguiente interfaz define las operaciones del TAD Conjunto:
/*
*
*
*
*
*
*
*
*
*/
*
*
*/
*
*
*/
*
*
*/
*
*
*/
*
*
*/
Pgina 7 de 19
4.
Estructuras Lineales
Son la primera de las dos grandes familias que vamos a estudiar este curso. Representa colecciones
de elementos dispuestos en forma de secuencias, es decir, que cada elemento puede tener otros (a
lo sumo dos, aunque esto depender de las polticas de acceso) adyacentes, que sern, por lo general,
su antecesor y su sucesor en el orden de disposicin (que no tiene por qu ser el de almacenamiento,
si bien se inspira en aqul originalmente) y, tpicamente, acceso.
4.1.
Introduccin
Las Estructuras Lineales representan una familia de TAD que dispone o almacena sus elementos como
una secuencia lgica (veremos que no necesariamente fsica).
La restriccin que esta familia de TAD incorpora a una coleccin es un cierto orden explcito, que
depende de las operaciones de almacenamiento que representen la historia de la instancia de estas
abstracciones en cada momento. A su vez, cada una de las subfamilias que estudiaremos se distingue
por una forma de acceso diferente.
4.2.
Listas
Las listas son la ms general de las estructuras lineales (vase la Figura 1 en la pgina 4). Su acceso se
realiza, tanto para consultar como para aadir o borrar elementos, por un nico punto. Existen varias
posibles formulaciones del modelo de Lista dependiendo de cmo se gestione dicho punto de acceso.
En primer lugar, la que se define respecto a un primer elemento y un resto, que ser a su vez otra
lista. Bajo este modelo, dicho acceso se realiza siempre sobre el primer elemento (la cabeza), si bien
existen operaciones para obtener el resto de la lista (es decir, la lista que comienza en el siguiente
elemento a la cabeza, que podra ser vaca). Por lo tanto, para avanzar por tus elementos, se invoca
el resto tantas veces como sea preciso hasta alcanzar la sublista cuya cabeza corresponde con el
mismo.
En segundo lugar, la lista con punto de inters, cuyo punto nico de acceso, es mvil mediante
operaciones adecuadas (de avance, retroceso y vuelta al principio, a la manera de los ficheros
secuenciales de cuya implementacin surgi dicho modelo). Para alcanzar un elemento concreto,
habr que realizar avances sucesivos y lectura de cada uno de ellos desde un punto conocido (el
comienzo).
Por ltimo, la lista posicional, que es la que proponemos en este curso, que asigna un natural a cada
uno de los elementos que marca el orden en el que se coloca en la estructura. Para alcanzar un
elemento, bien se deber conocer de antemano la posicin en que se ubica bien se deber avanzar
posicin a posicin y comprobar cada elemento hasta encontrar el deseado.
Cada una de estas aproximaciones se adeca mejor a un cierto tipo de problema o de tratamiento,
si bien, todas son equivalentes entre s en tanto en cuanto puede convertirse una a otra con facilidad
Curso 2.016 EPED
Pgina 8 de 19
*
*
*
*
*
*/
*
*
*
*
*/
*
*
*
*
*
*/
*
*
*
*
*/
*
*
*
*/
4.3.
Pilas
Las pilas son especializaciones de las listas. Como stas, disponen de un solo punto de acceso tanto
para consulta como para insercin pero, a diferencia de aquellas, dicho punto es fijo. En este sentido,
constituyen secuencias de elementos cuya disposicin es inversa al orden en que se almacenaron.
Denotan, de esta forma, el hecho de que el acceso a cualquier elemento que tenga otros adyacentes
(sucesores en orden pero antecesores en acceso) requiere la eliminacin de dichos adyacentes de la
instancia del TAD, ya que cada elemento, salvo el que ocupa la primera posicin o cima, tiene uno
superior. Cuando este no es el comportamiento deseado, existen dos estrategias: reconstruir la pila
Curso 2.016 EPED
Pgina 9 de 19
*
*
*
*/
*
*
*/
*
*
*/
*
*
*/
4.4.
Colas
Las colas son especializaciones de las listas. Disponen de un punto de acceso tanto para consulta y
otro para insercin, que son distintos (ocupan los extremos opuestos de la secuencia). Adems,
dichos puntos son fijos. En este sentido, son secuencias de elementos cuya disposicin refleja el
orden en el que fueron almacenadas. Cada elemento, excepto el primero, tendr un anterior, por lo
que el acceso a cualquier elemento requerir, por lo general, la destruccin de la cola hasta el punto
en que dicho elemento ocupe la primera posicin. Como en el caso de las pilas, esto requiere de
Curso 2.016 EPED
Pgina 10 de 19
*
*
*/
*
*
*/
5.
Estructuras Jerrquicas
Como puede apreciarse en la Figura 1 en la pgina 4, las estructuras jerrquicas pueden entenderse
como resultantes de imponer una restriccin (el orden jerrquico) sobre los Grafos Dirigidos Acclicos,
que son aquellas estructuras de datos en las que un elemento puede tener cualquier nmero de
antecesores y sucesores directos (grafo), donde las conexiones entre nodos* (llamadas aristas) slo
se pueden navegar en un sentido (grafo dirigido) y donde un nodo no puede ser su propio antecesor
en una cadena de relaciones (grafo dirigido acclico).
Ntese que una lista es una jerarqua (si bien, degenerada) de forma trivial.
5.1.
Terminologa y definiciones
Las estructuras jerrquicas son aquellas en las que existe una organizacin tal que un elemento de la
coleccin puede tener, a lo sumo, un antecesor directo (a veces llamado padre) pero un nmero de
sucesores directos (hijos en la misma terminologa) que depende de la formulacin de la estructura.
Estas estructuras cuentan con un elemento que es antecesor (directo o indirecto) de todos los dems
y que suele denominarse raz. A partir de la raz, el resto de elementos se expanden como un conjunto
Curso 2.016 EPED
Pgina 11 de 19
5.2.
Un rbol n-ario es aqul cuyo factor de expansin (el nmero mximo de hijos de un nodo
determinado) no est acotado, esto es, cada nodo puede tener un nmero cualquiera de hijos y este
nmero no est determinado de antemano. Esto permita modelar jerarquas abiertas, es decir, cuyos
nodos pueden tener cantidades variables de hijos. Sin embargo, tambin son tiles aquellas
jerarquas cuya descendencia es siempre de un tamao limitado.
Una especializacin sera un rbol k-ario, es decir, aqul en que cada rbol puede tener k subrboles
como mximo. Algunos rboles k-arios tienen especial relevancia dada su utilidad como son los
Curso 2.016 EPED
Pgina 12 de 19
*
*
*/
*
*
*/
*
*
*
*
*
*
*/
*
*/
*
*
*
*
*/
5.3.
rboles Binarios
Un rbol binario es una especializacin de un rbol k-ario en que k es 2, es decir, una raz de
cualquiera de los subrboles (incluido el rbol completo) puede tener, a lo sumo, dos hijos. Se habla,
entonces, de hijo izquierdo e hijo derecho, en lugar de una coleccin de hijos.
En un rbol binario, aparece un nuevo tipo de recorrido denominado en orden, que consiste en visitar
primero todo el subrbol izquierdo, luego la raz y luego todo el subrbol derecho. Como en los
anteriores casos, esta definicin es recursiva y, por tanto, aplicable a cada subrbol.
API de rbol Binario: BTreeIF
La siguiente interfaz define las operaciones del TAD rbol Binario:
/* Representa un rbol binario de elementos, en el que un nodo
* puede tener, a lo sumo, dos hijos (fan-out \leq 2 para todos
* los nodos).
* Los smbolos precedidos de \ pueden encontrarse en la URL
* http://web.ift.uib.no/Teori/KURS/WRK/TeX/symALL.html y se
* corresponden con los smbolos matemticos habituales.
public interface BTreeIF<E> extends CollectionIF<E>{
public int PREORDER = 0;
public int POSTORDER = 1;
public int BREADTH = 2;
public int INORDER
= 3;
public int RLBREADTH = 4;
*
*
*
*
*
*/
*
*
*/
*
*
*
*/
*
*
*
Pgina 14 de 19
*/
*
*
*/
*
*
*
*/
*/
*/
*
*/
*
*
*
*
*
*/
5.4.
Un rbol de bsqueda binaria es aqul rbol binario que est ordenado de manera que el subrbol
izquierdo siempre es menor estricto (mayor estricto) que la raz y sta que el subrbol derecho. Esta
definicin se realiza de forma recursiva, de manera que, cualquier subrbol del rbol completo
tambin debe cumplirla.
La consecuencia inmediata es que el recorrido en orden de un rbol de bsqueda binaria produce
una ordenacin (secuencia ascendente o descendente, segn proceda) de los elementos contenidos
en el mismo.
Los rboles de bsqueda binaria son una especializacin de los rboles binarios cuya caracterstica es
Curso 2.016 EPED
Pgina 15 de 19
6.
Pgina 16 de 19
Se han destacado las operaciones que afectan a una familia o parte de ella, as como sus
caractersticas (as, por ejemplo, en las estructuras secuenciales, son posibles los recorridos
con la salvedad de que en pilas y colas son destructivos por naturaleza).
Pgina 17 de 19
o
o
Acceso
arbitrario por
punto nico
(+/)
top, push,
pop
Primero y
resto
Punto de
inters
Posicin
PILAS
Acceso fijo
nico (LIFO)
COLAS
Accesos fijos
diferenciados
R, W
Raz, hijo
izq./ dcho.
recorridos
(en orden)
RBOLES
GENERALES
o
o
n-arios (no
acotados)
k-arios (k
fijo)
ternarios
(k = 3)
RBOLES
BINARIOS
CONTENEDOR
ES (bsicos)
Acceso
arbitrario a
subestructuras
Fan-out = 2
Caracterstica taxonmica
No existe organizacin
(pero podra incluirse una
operacin utilitaria de iteracin
sobre la coleccin)
Organizacin lineal
(secuencial) segn insercin
Recorrido segn insercin
No hay ordenacin por
claves (podra usarse en
Listas)
o
o
o
Organizacin jerrquica
segn insercin
Recorrido segn estrategias
Admiten ordenacin por
claves
(+ elemento en
raz)
JERARQUAS
, , []
LISTAS
Superfamilia
SECUENCIAS
acceso)
Enqueue,
dequeue,
first
No destructivo
Caracterstica
semntica
Consulta
Raz, hijo[n],
subrbol(es),
recorridos (pre, post,
anchura)
Destructivos
Familia
CONJUNTOS/ (presencia/
ausencia, no
BOLSAS
Bsqueda
dicotmica (por
clave), findMin,
findMax
, +, ,,,|S|
Operaciones
ms relevantes
o
o
RBOLES DE
BSQUEDA
BINARIA
Orden por
claves
privilegiado
o
o
Curso 2.016 EPED
Jos Ignacio Mayorga Toledano
Pgina 18 de 19
7.
Tabla de Figuras
Figura 1. Jerarqua de TAD con relaciones de sucesin.
Figura 2. La API de Colecciones (CollectionIF)
Figura 3. La API de Conjuntos (SetIF)
Figura 4. La API de Listas (ListIF)
Figura 5. La API de Pilas (StackIF)
Figura 6. La API de Colas (QueueIF)
Figura 7. La API de rboles (TreeIF)
Figura 8. La API de rboles Binarios (BTreeIF)
4
6
7
9
10
11
14
15
*
Habitualmente, se entiende que un nodo contiene un elemento, por lo que, en la mayora de las ocasiones, pueden
usarse intercambiablemente ambos trminos en el contexto de una estructura de datos cuyos elementos se disponen
en nodos.
Idea y figura adaptadas de la publicada por D.W. Harder del Dpto. De Ingeniera Elctrica y de Computadores de la
Universidad de Waterloo (puede verse la figura completa y las explicaciones adicionales en la URL
https://ece.uwaterloo.ca/~dwharder/aads/Abstract_data_types/)
Pgina 19 de 19