Sei sulla pagina 1di 19

Estrategias

de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas

UD I. Conceptos Fundamentales de Algoritmia

Tema 1. Estructuras de datos bsicas


1. INTRODUCCIN: ALGORITMOS Y ESTRUCTURAS DE DATOS __________________________________ 1
2. DE LAS ESTRUCTURAS DE DATOS A LOS TIPOS ABSTRACTOS __________________________________ 2
2.1.
INTRODUCCIN: ESTRUCTURAS, TIPOS Y TIPOS ABSTRACTOS DE DATOS ______________________________ 2
2.2.
CLASIFICACIN: FAMILIAS PRINCIPALES DE TAD _____________________________________________ 3
2.3.
DEFINICIN, ESTRUCTURA Y USOS DEL TAD ________________________________________________ 4

Especificacin de un TAD _________________________________________________________ 4
2.4.
REPRESENTACIN DEL TAD: IMPLEMENTACIONES PRINCIPALES ___________________________________ 5
3. COLECCIONES Y CONJUNTOS ___________________________________________________________ 6
3.1.
COLECCIONES ____________________________________________________________________ 6

API de Colecciones: CollectionIF ___________________________________________________ 6
3.2.
CONJUNTOS _____________________________________________________________________ 7

API de Conjunto: SetIF ___________________________________________________________ 7
4. ESTRUCTURAS LINEALES _______________________________________________________________ 8
4.1.
INTRODUCCIN ___________________________________________________________________ 8
4.2.
LISTAS _________________________________________________________________________ 8

API de Lista: ListIF ______________________________________________________________ 9
4.3.
PILAS __________________________________________________________________________ 9

API de Pila: StackIF _____________________________________________________________ 10
4.4.
COLAS ________________________________________________________________________ 10

API de Cola: QueueIF ___________________________________________________________ 11
5. ESTRUCTURAS JERRQUICAS __________________________________________________________ 11
5.1.
TERMINOLOGA Y DEFINICIONES _______________________________________________________ 11
5.2.
RBOLES GENERALES O N-ARIOS ______________________________________________________ 12

API de rbol: TreeIF ____________________________________________________________ 13
5.3.
RBOLES BINARIOS _______________________________________________________________ 14

API de rbol Binario: BTreeIF _____________________________________________________ 14
5.4.
RBOLES DE BSQUEDA BINARIA ______________________________________________________ 15

rboles AVL __________________________________________________________________ 16
6. APNDICE A. JERARQUA DE TAD POR FAMILIAS PRINCIPALES _______________________________ 16
7. TABLA DE FIGURAS __________________________________________________________________ 19

1.

Introduccin: Algoritmos y Estructuras de Datos

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

Jos Ignacio Mayorga Toledano

Pgina 1 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas

un ordenador para que pueda recuperarse con eficiencia.

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.

De las Estructuras de Datos a los Tipos Abstractos

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.

Introduccin: estructuras, tipos y tipos abstractos de datos

En la introduccin al tema, introdujimos el concepto de Estructura de Datos y discutimos su


necesidad. En este siguiente paso, nos preguntamos por su utilidad. Qu ventajas presenta
almacenar la informacin en paquetes iguales? Para qu se definen formas de organizacin de los
datos?
Contestaremos en este apartado a dichas cuestiones e introduciremos las principales definiciones
necesarias para dar soporte al resto del tema.
Como vimos en la introduccin, una Estructura de Datos es una forma particular de almacenar y
organizar informacin en un ordenador. Su propsito es el de su recuperacin eficiente. Subyace al
concepto la idea de que almacenar los datos de forma homognea (es decir, todos los datos de
similares caractersticas dispuestos u organizados en la misma manera) simplifica las operaciones de
acceso (recuperacin) a datos existentes y almacenamiento (insercin) de datos nuevos.
Es decir, se trata de favorecer el uso repetido de la informacin (o reutilizacin, en este caso, de los
datos) que permite el funcionamiento del programa en cuestin. Este primer objetivo, se queda
enseguida corto, ya que, por una parte, obligara a codificar los procesos de tratamiento de los datos
y por otra, la forma de almacenamiento de los mismos (obviamente, ambos aspectos van
ntimamente ligados) una y otra vez entre programas de ndole similar, es decir, que utilizaran
informacin anloga.
Esta conclusin se alcanz, obviamente, en los primeros tiempos de los lenguajes de programacin
imperativos y da lugar a la siguiente definicin:
Un Tipo de Datos consiste en una clasificacin que identifica una categora de datos (por ejemplo,
enteros, reales o booleanos), que determina los valores posibles del tipo, una codificacin concreta
(una estructura de datos, por lo tanto), que permite interpretar el significado de dichos datos y un
conjunto de operaciones que permiten manipular la informacin definida por los valores del tipo
Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 2 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


(crearlos, eliminarlos, aadirlos, consultar sus valores y otras caractersticas, compararlos, etc.)
La codificacin del tipo se conoce como representacin y consiste en la definicin de la forma de
almacenamiento de los valores del tipo en funcin de otras formas (o tipos) ms simples
(habitualmente, proporcionados por el lenguaje de programacin) o primitivos. Cada tipo recibe un
nombre nico, que se utiliza para la declaracin de variables del mismo (sintaxis).
Un tipo de datos representa un avance, siquiera limitado, ya que permite la reutilizacin tanto de
datos como de operaciones en el mbito del programa que los contiene. El siguiente paso, que tratar
de facilitar o potenciar la reutilizacin de los datos y sus operaciones en programas diferentes que
requieran el mismo tipo (en general) de informacin consiste en la definicin de Tipos Abstractos de
Datos.
Un Tipo Abstracto de Datos (TAD, en lo sucesivo) es un modelo matemtico para una cierta categora
o clase (no necesariamente en el sentido de la POO) de datos que tienen similar comportamiento o
bien para ciertos tipos de datos que exhiben semnticas similares incluso sobre diferentes lenguajes
de programacin. Los TAD se definen a travs de las operaciones que se pueden realizar sobre los
valores del tipo as como por las restricciones sobre los efectos (y, en ciertos casos, el coste) de dichas
operaciones. Un TAD podr implementarse mediante tipos de datos o estructuras de datos concretos
de diversas maneras y en muy diferentes lenguajes de programacin.
En resumen, un TAD viene definido por un catlogo de operaciones que producen un conjunto de
trminos de un lgebra, que representan los valores posibles del TAD. Esas operaciones, pueden ser
de varias clases, siendo las ms importantes:

Constructoras: crean trminos nuevos del tipo (estructura vaca, aadir elementos).

Modificadoras: modifican trminos ya creados del tipo, en particular, permiten modificar y


eliminar valores.

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.

La abstraccin es un proceso que consiste en la eliminacin o supresin de ciertas caractersticas para


simplificar algn aspecto. En un TAD (abstraccin de datos y abstraccin funcional), viene dada por
su independencia de la implementacin, es decir, que el efecto o resultado de las operaciones no
debe depender de la misma y que, bajo cualquier implementacin, dicho efecto debe permanecer
invariable.

2.2.

Clasificacin: familias principales de TAD

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

Jos Ignacio Mayorga Toledano

Pgina 3 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas

la Figura 9 en la pgina 18).


Conjunto /
Correspondencia
adyacencia

Grafo

equivalencia

orden parcial

Particin

Grafo Dirigido
Acclico
orden jerrquico
rbol

orden lineal explcito

orden lineal implcito (parcial)


Lista
ordenada

Lista
especializacin
Cadena (car)
Pila

Deque

especializacin

especializacin

Cola de
prioridad

Cola.
.
.

.
.

Figura 1. Jerarqua de TAD con relaciones de sucesin.

2.3.

Definicin, estructura y semntica del TAD

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).

Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 4 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas



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.

Representacin e implementacin del TAD

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).

Tras la implementacin de las operaciones, deber comprobarse su correccin (juegos de pruebas vs


verificacin formal de la correccin) y depurarse los errores que se descubran, en un ciclo que debe
llevar a la preparacin del TAD para su uso en condiciones de produccin.
En cuanto a las implementaciones de los TAD, existe una amplia variedad pero nos interesa fijarnos
en dos tipos de representacin (para cada TAD) de especial inters y que tienen que ver con la
caracterizacin que vimos en la introduccin: almacenamiento de datos de programa o de
direcciones que indican dnde se encuentran dichos datos. Estas dos opciones darn lugar a las
implementaciones estticas (generalmente, basadas en estructuras indexadas de acceso directo,
tales como arrays) y a las dinmicas (basadas en referencias o punteros, que son direcciones que
indican dnde se ubica un objeto determinado).
Adems, nos detendremos en las propiedades de las distintas implementaciones, qu ventajas y
desventajas presentan y por qu son ms o menos apropiadas para un determinado TAD.

Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 5 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas

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> {

*
*
*
*
*/

/* Los mtodos add, remove, get [set] se eliminan de la


* interfaz para nombrarlos apropiadamente en cada TAD.

*
*/

/* Devuelve el nmero de elementos de la coleccin.


* @return: cardinalidad de la coleccin.
public int size ();

*
*/

/* Determina si la coleccin est vaca.


* @return: size () == 0
public boolean isEmpty ();

*
*/

/* Determina la pertenencia del parmetro a la coleccin


* @param: el elemento cuya pertenencia se comprueba.
* @return:param \in self
public boolean contains (E e);

*
*
*/

/* Elimina todos los elementos de la coleccin.


public void clear ();

*/

/* Devuelve un iterador sobre la coleccin.


* @return: un objeto iterador para los elementos de
* la coleccin.
public IteratorIF<E> iterator ();

*
*
*/

Figura 2. La API de Colecciones (CollectionIF)


Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 6 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


Ntese que se han excluido las operaciones modificadoras que permiten aadir, eliminar y cambiar
un valor almacenado as como la consultora que recupera el valor propiamente dicho. Esto es as
para posibilitar que cada TAD adopte para sus operaciones los nombres ms habituales en la
literatura del tema. Por supuesto, de existir alguna clase que implementase directamente esta
interfaz, habra de dotarla con estas operaciones (un opcin consistira en crear una clase abstracta
que defina esos mtodos para todas las clases que implementen directamente colecciones).

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:
/*
*
*
*
*

Representa un conjunto de elementos. Se trata del concepto


matemtico de conjunto finito (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 SetIF<E> extends CollectionIF<E> {


/* Devuelve la unin del conjunto llamante con el parmetro
* @param: el conjunto con el que realizar la unin
* @return: self \cup @param
public SetIF<E> union (SetIF<E> s);

*
*
*/

/* Devuelve la interseccin con el parmetro.


* @param: el conjunto con el que realizar la interseccin.
* @return: self \cap @param
public SetIF<E> intersection (SetIF<E> s);

*
*
*/

/* Devuelve la diferencia con el parmetro (los elementos


*
* que estn en el llamante pero no en el parmetro).
* @param: el conjunto con el que realizar la diferencia.
* @return: self \setminus @param
public SetIF<E> difference (SetIF<E> s);

*
*
*/

/* Determina si el parmetro es un subconjunto del llamante.


* @param: el posible subconjunto del llamante.
* @return: self \subseteq @param
public boolean isSubset (SetIF<E> s);

*
*
*/

/* Elimina todos los elementos de la coleccin parmetro.


* @param: la coleccin de elementos que se desean eliminar
* del conjunto llamante.
public void removeAll (CollectionIF<E> c);

*
*
*/

Figura 3. La API de Conjuntos (SetIF)


Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 7 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


Ntese que esta interfaz, que extiende la de Coleccin, incorpora mtodos para realizar operaciones
conjuntistas. El uso pretendido es doble: una coleccin no necesita comportarse como un conjunto
habitualmente. De hacerlo, entonces, dicha coleccin debera satisfacer esta interfaz. Por otra parte,
cualquier TAD podra querer tratarse como un conjunto, para lo cual slo necesitara satisfacer esta
interfaz.

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

Jos Ignacio Mayorga Toledano

Pgina 8 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


desde similitud de la propia interfaz del TAD con poco trabajo de implementacin.
API de Lista: ListIF
La siguiente interfaz define las operaciones del TAD Lista interpretado como una secuencia posicional
de elementos:
/* Representa una lista de elementos. Una lista es una
* coleccin que mantiene un orden lineal, es decir, una
* secuencia.
* 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 ListIF<E> extends CollectionIF<E>{

*
*
*
*
*
*/

/* Devuelve el elemento de la lista que ocupa la posicin


* indicada por el parmetro.
* @param pos la posicin comenzando en 1.
* @Pre: 1 \leq pos \leq size()
* @return el elemento en la posicin pos.
public E get (int pos);

*
*
*
*
*/

/* Modifica la posicin dada por el parmetro pos para que


* contenga el valor dado por el parmtero e.
* @param pos la posicin cuyo valor se debe modificar,
* comenzando en 1.
* @param e el valor que debe adoptar la posicin pos.
* @Pre: 1 \leq pos \leq size()
public void set (int pos, E e);

*
*
*
*
*
*/

/* Inserta un elemento en la Lista.


* @param elem El elemento que hay que aadir.
* @param pos La posicin en la que se debe aadir elem,
* comenzando en 1.
* @Pre: 1 \leq pos \leq size()+1
public void insert (E elem, int pos);

*
*
*
*
*/

/* Elimina el elemento que ocupa la posicin del parmetro


* @param pos la posicin que ocupa el elemento a eliminar,
* comenzando en 1
* @Pre: 1 \leq pos \leq size()
public void remove (int pos);

*
*
*
*/

Figura 4. La API de Listas (ListIF)

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

Jos Ignacio Mayorga Toledano

Pgina 9 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


en una nueva (lo que requerir invertirla, ya que se accede en orden contrario al de su llenado) o
iterarla. Los iteradores son estructuras utilitarias que permiten un acceso no destructivo (y,
deseablemente, eficiente) a una estructura de datos dada para su recorrido. En ciertos casos, como
los de las colecciones o los conjuntos, su concurso es esencial, ya que, de otra forma, no existe
manera de averiguar, en tiempo finito y limitado, qu elementos forman parte de dicha estructura.
En otros casos, como es el de las pilas o las colas, su utilizacin es ms una cuestin de comodidad
que de necesidad. Durante el curso, slo favoreceremos el uso de iteradores all donde sean
necesarios (stas sern restricciones de enunciado, no del TAD). En todo caso, es preciso aclarar que
la construccin de un iterador aade un coste lineal en el nmero de elementos a la operacin que
lo utilice. Si bien, en trminos asintticos (como veremos en el tema dedicado al anlisis de la
eficiencia de los algoritmos) esto no suele presentar un problema serio, en trminos pragmticos,
puede doblar el coste de una operacin respecto a una cardinalidad posiblemente grande de la
coleccin tratada. Por esta razn, el uso de un iterador debe justificarse para cada situacin en la que
sea empleado.
API de Pila: StackIF
La siguiente interfaz define las operaciones del TAD Pila:
/* Representa una pila de elementos.
* especializacin de una lista, que
* almacenamiento de sus elementos y
* Last In First Out (LIFO).
public interface StackIF <E> extends

Una pila es una


mantiene el orden de
una poltica de acceso
CollectionIF<E>{

*
*
*
*/

/* Obtiene el elemento en la cima de la pila


* @Pre !isEmpty ();
* @return la cima de la pila.
public E getTop ();

*
*
*/

/* Incluye un elemento en la cima de la pila. Modifica el


* tamao de la misma.
* @param elem el elemento que se quiere aadir en la cima
public void push (E elem);

*
*
*/

/* Elimina la cima de la pila. Modifica el tamao de la


* pila.
* @Pre !isEmpty ();
public void pop ();

*
*
*/

Figura 5. La API de Pilas (StackIF)

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

Jos Ignacio Mayorga Toledano

Pgina 10 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


copia para garantizar la conservacin de la instancia de cola o bien del uso de un iterador all donde
sea aceptable y adecuado.
Existe una versin ms general de las colas, las llamadas colas de doble acceso o colas con dos finales,
deque en su terminologa anglosajona (pronnciese /dek/) de las que las colas son una especializacin
(pierden uno de sus dos finales en el proceso).
API de Cola: QueueIF
La siguiente interfaz define las operaciones del TAD Cola:
/* Representa una cola de elementos.
* especializacin de una lista, que
* almacenamiento de sus elementos y
* First In First Out (FIFO)
public interface QueueIF <E> extends

Una cola es una


*
mantiene el orden de
*
una poltica de acceso *
*/
CollectionIF<E>{

/* Devuelve el primer elemento de la cola.


* @Pre !isEmpty()
* @return la cabeza de la cola (su primer elemento).
public E getFirst ();

*
*
*/

/* Incluye un elemento al final de la cola. Modifica el *


* tamao de la misma (crece en una unidad).
*
* @param elem el elemento que debe encolar (aadir).
*/
public void enqueue (E elem);
/* Elimina el primer elemento de la cola. Modifica la
* tamao de la misma (decrece en una unidad).
* @Pre !isEmpty();
public void dequeue ();

*
*
*/

Figura 6. La API de Colas (QueueIF)

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

Jos Ignacio Mayorga Toledano

Pgina 11 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


de ramas (si bien, con la raz en el lugar ms alto de la representacin cuando sta es grfica), por lo
que se suele hablar de rboles. Ntese que, los hijos de un rbol son a su vez rboles (se suelen
denominar subrboles, ya que lo son del rbol completo). Entre s, la relacin de los hijos de una raz
determinada, es la de ser hermanos.
En los rboles, el factor de expansin (fan-out en su terminologa anglosajona) representa cuntos
hijos puede tener como mximo un nodo. Este factor no tiene por qu ser nico para todo el rbol e,
incluso, puede no estar determinado (lo que implicara que un nodo puede contar con cualquier
nmero de hijos). Un elemento sin hijos se dice que es una hoja. Para completar estas definiciones,
un nodo con hijos se dice interno y uno sin ellos se dice externo.
Desde un antecesor, puede navegarse hacia sus sucesores utilizando las relaciones de ser-hijo.
Recprocamente, mediante la relacin de ser-padre, puede ascenderse en la cadena jerrquica. Estas
relaciones, cuando existen, estn representadas por la presencia de una arista entre elementos (un
padre y su hijo). Este concepto permite definir el de altura de un nodo, que es el nmero de aristas
que componen el camino entre dicho nodo y la hoja ms lejana a la que se pueda acceder desde el
mismo. Para una hoja, su altura ser 0, para el padre de una hoja, 1 y as sucesivamente hasta alcanzar
la raz, cuya altura se conoce como altura del rbol. Incidentalmente, la altura de un rbol que tiene
slo un elemento (su raz) ser 0. La de un rbol vaco no est definida.
Un concepto relacionado con el de altura es el de profundidad, que para un nodo, es la longitud del
camino entre la raz y dicho nodo. Por lo tanto, la profundidad de la raz ser 0, la se sus hijos, 1 y as
sucesivamente, hasta llegar a las hojas. La hoja ms profunda determina la profundidad del rbol,
valor que coincide con su altura.
Un recorrido es una operacin en la que se visitan (lo que implica bien acceso bien actualizacin de
su valor) todos los nodos de una estructura de datos, en particular, de un rbol, exactamente una
vez. Los recorridos terminarn (bien en una hoja, si el recorrido es descendente bien en la raz, en
caso contrario), ya que el nmero de elementos en un rbol es finito.
Existen varios tipos de recorridos, como son en profundidad (es decir, movindose todo el tiempo en
la direccin de mxima profundidad; este tambin se conoce como recorrido en preorden, ya que su
definicin implica visitar primero la raz de un subrbol y luego sus hijos, de nuevo en preorden), en
postorden (o sea, visitando primero los hijos de cada subrbol en postorden y despus su raz) o en
anchura (es decir, manteniendo la profundidad en cada momento mientras no se hayan recorrido
todos los nodos que tengan la misma, sea desde la raz o terminando en sta).
Por ltimo, un conjunto de rboles disjuntos se denomina un bosque.

5.2.

rboles Generales o N-arios

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

Jos Ignacio Mayorga Toledano

Pgina 12 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


ternarios (k=3) o los binarios (k=2), de los que nos ocuparemos ms adelante. Tambin existen
especializaciones en que le nmero de hijos es fijo pero no idntico en todo el rbol, por ejemplo, los
rboles 2-3, donde hay nodos que tienen dos hijos y otros que tienen tres.
API de rbol: TreeIF
La siguiente interfaz define las operaciones del TAD rbol (general) o n-ario:
/* Representa un rbol n-ario de elementos, donde el nmero de *
* hijos de un determinado nodo no est determinado de antemano *
* (fan-out no prefijado, no necesariamente igual en cada nodo).*
* Un rbol supone una ordenacin jerrquica de sus elementos, *
* donde un nodo slo puede tener un antecesor directo (padre) *
* pero n sucesores directos (hijos).
*
* 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 TreeIF <E> extends CollectionIF<E>{
public int PREORDER = 0;
public int POSTORDER = 1;
public int BREADTH
= 2;
/* Obtiene la raz del rbol (nico elemento sin antecesor).*
* @Pre: !isEmpty ();
*
* @return el elemento que ocupa la raz del rbol.
*/
public E getRoot ();
/* Modifica la raz del rbol.
* @param el elemento que se quiere poner como raz del
* rbol.
public void setRoot (E e);

*
*
*/

/* Obtiene los hijos del rbol llamante.


* @return la lista de hijos del rbol (en el orden en que
* estn almacenados en el mismo).
public ListIF <TreeIF <E>> getChildren ();

*
*
*/

/* Obtiene el hijo que ocupa la posicin dada por parmetro.*


* @param pos la posicin del hijo que se desea obtener,
*
* comenzando en 1.
*
* @Pre 1 \leq pos \leq getChildren ().size ();
*
* @return el rbol hijo que ocupa la posicin pos.
*/
public TreeIF<E> getChild (int pos);
/* Inserta un rbol como hijo en la posicin pos.
* @param pos la posicin que ocupar el rbol entre sus
* hermanos, comenzando en 1.
* Si pos == getChildren ().size () + 1, se aade como
* ltimo hijo.
* @param e el hijo que se desea insertar.
* @Pre 1 \leq pos \leq getChildren ().size () + 1
public void addChild (int pos, TreeIF<E> e);

*
*
*
*
*
*
*/

/* Elimina el hijo que ocupa la posicin parmetro.


*
* @param pos la posicin del hijo con base 1.
*
* @Pre 1 \leq pos \leq getChildren ().size ()
*/
public void removeChild (int pos);
Curso 2.016 EPED
Jos Ignacio Mayorga Toledano
Pgina 13 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


/* Determina si el rbol llamante es una hoja.
* @return el rbol es una hoja (no tiene hijos).
public boolean isLeaf ();

*
*/

/* Obtiene un iterador para el rbol.


* @param traversal el tipo de recorrido indicado por las
* constantes PREORDER (preorden o profundidad), POSTORDER
* (postorden) o BREADTH (anchura)
* @return un iterador segn el recorrido indicado
public IteratorIF<E> iterator (int traversal);

*
*
*
*
*/

Figura 7. La API de rboles (TreeIF)

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;

*
*
*
*
*
*/

/* Obtiene la raz del rbol (nico elemento sin antecesor).


* @Pre: !isEmpty ();
* @return el elemento que ocupa la raz del rbol.
public E getRoot ();

*
*
*/

/* Obtiene el hijo izquierdo del rbol llamante o un rbol


* vaco en caso de no existir.
* @return un rbol, bien el hijo izquierdo bien uno vaco
* de no existir tal hijo.
public BTreeIF<E> getLeftChild ();

*
*
*
*/

/* Obtiene el hijo derecho del rbol llamante o un rbol


* vaco en caso de no existir.
* @return un rbol, bien el hijo derecho bien uno vaco
Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

*
*
*

Pgina 14 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


* de no existir tal hijo.

*/

public BTreeIF<E> getRightChild ();


/* Modifica la raz del rbol.
* @param el elemento que se quiere poner como raz del
* rbol.
public void setRoot (E e);

*
*
*/

/* Pone el rbol parmetro como hijo izquierdo del rbol


*
* llamante. Si ya haba hijo izquierdo, el antiguo dejar de *
* ser accesible (se pierde).
*
* @param child el rbol que se debe poner como hijo
*
* izquierdo.
*/
public void setLeftChild (BTreeIF <E> child);

/* Pone el rbol parmetro como hijo derecho del rbol


* llamante. Si ya haba hijo izquierdo, el antiguo dejar de
* ser accesible (se pierde).
* @param child el rbol que se debe poner como hijo derecho.
public void setRightChild (BTreeIF <E> child);

*
*
*
*/

/* Elimina el hijo izquierdo del rbol.


public void removeLeftChild ();

*/

/* Elimina el hijo derecho del rbol.


public void removeRightChild ();

*/

/* Determina si el rbol llamante es una hoja.


* @return el rbol es una hoja (no tiene hijos
public boolean isLeaf ();

*
*/

/* Obtiene un iterador para el rbol.


* @param traversal el tipo de recorrido indicado por las
* constantes PREORDER (preorden o profundidad), POSTORDER
* (postorden), BREADTH (anchura), INORDER (en orden) o
* RLBREADTH (anchura de derecha a izquierda).
* @return un iterador segn el recorrido indicado.
public IteratorIF<E> iterator (int traversal);

*
*
*
*
*
*/

Figura 8. La API de rboles Binarios (BTreeIF)

5.4.

rboles de Bsqueda Binaria

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

Jos Ignacio Mayorga Toledano

Pgina 15 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


que mantienen sus elementos en orden. De esta forma, realizar una bsqueda binaria en un rbol de
bsqueda binaria consiste en visitar recursivamente una raz y seleccionar cul subrbol debe
visitarse a continuacin (ya que el otro, por definicin, podr descartarse) hasta que bien se
encuentre el elemento buscado bien se determine que no pertenece a la coleccin. De esta forma,
el nmero de visitas necesarias para encontrar un elemento depender de la altura del rbol, razn
por la cual existe un conjunto de estrategias para garantizar que sta es logartmicamente
proporcional al nmero total de elementos del rbol (de no hacerse as, tras un conjunto de
inserciones o borrados, un rbol binario podra degenerar en una lista, siendo entonces su altura
igual al nmero de elementos total, por lo que el nmero de visitas necesario para encontrar un
elemento dado dependera del nmero de elementos de la coleccin completa).
rboles AVL
Un rbol AVL, nombrado a partir de sus inventores, Georgii Maximovich Adelson-Velskii y Yevgeny
Mijailovich Landis, es un rbol de bsqueda binaria equilibrado (es decir, tal que la altura de dos
subrboles hermanos no difiere en ms de una cierta cota) en altura de manera que la de ningn
subrbol supere la de su hermano en ms de una unidad. De esta manera, se consigue que la
insercin el borrado y la bsqueda de un elemento requiera un nmero de visitas proporcional al
logaritmo del nmero de nodos totales del rbol.
Adems, la definicin de Adelson-Velskii y Landis logra que tras unas insercin o borrado, pueda
restablecerse el equilibrio en altura con, a lo sumo, dos rotaciones que suponen movimientos que no
dependen del tamao del rbol (como veremos en el tema 3, esto implica un coste constante
respecto al mismo).
Ntese que estas restricciones de eficiencia no modifican ni afectan a la interfaz, que sigue siendo la
de rbol binario, sino a la implementacin, que tendr que garantizar que se satisfacen dichos
requisitos.

6.

Apndice A. Jerarqua de TAD por familias principales

A continuacin, ofrecemos un cuadro resumen con la clasificacin taxonmica de las principales


familias de TAD que son de inters para el curso. La primera columna destaca las operaciones de la
familia de TAD relevantes para distinguirla de la anterior. La segunda columna incluye el nombre
genrico de la familia y destaca su caracterstica semntica. La tercera da cuenta de la ubicacin
taxonmica de la familia (su superfamilia), que engloba a las que exhiben una semntica genrica
similar. La ltima columna ofrece el nivel taxonmico de la familia y una serie de caractersticas
explicativas de la superfamilia a la que pertenecen las familias englobadas en la divisin taxonmica
que corresponda en cada nivel.
En cuanto a las filas, cada una corresponde a una familia (que puede incluir subfamilias como listas
de puntos si as procediese en un cuerpo menor que el ttulo de la familia) y cada grupo separado de
filas a una superfamilia. Incluimos una fila para las colecciones o contenedores bsicos dada su
relevancia en la taxonoma que proponemos en este cuadro, ya que, a diferencia de la que podemos
ver en la Figura 1 (vase la pgina 4), aqu nos interesan las variantes de las familias respecto a su
funcionalidad ms que la capacidad de derivar unas de otras (si bien, puede apreciarse una
correspondencia parcial entre ambos modos).
Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 16 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas


Por ltimo y aunque los rboles d bsqueda binaria son una implementacin y no un TAD o familia
propiamente dichos, aadimos una fila para ellos por la relevancia que tienen para el curso.

Leyenda:

Las familias en NEGRITA forman parte del temario del curso.

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).

Operaciones de los TAD (clave de smbolos):


o : pertenencia.
o +: adicin de un elemento.
o : borrado de un elemento.
o : unin conjuntista.
o : interseccin conjuntista.
o : diferencia conjuntista.
o ||: cardinalidad (nmero de elementos) del conjunto.
o : siguiente (orden, secuencia).
o : anterior (orden, secuencia).
o []: acceso[posicin] (R/W lectura o escritura, si procede).
o El resto de operaciones que no responde a smbolos abreviados se nota por su nombre
completo.

Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 17 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas

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

Recorrido segn estrategia (pre/post/anchura)

Recorrido (orden de organizacin/acceso)

, +, ,,,|S|

Operaciones
ms relevantes

o
o

Recorrido prioritario segn


estrategia privilegiada
Se mantiene ordenacin por
claves
Bsqueda priorizada
(dicotmica)

RBOLES DE
BSQUEDA
BINARIA

Orden por
claves
privilegiado

o
o

Figura 9. Taxonoma de familias principales de TAD


Curso 2.016 EPED


Jos Ignacio Mayorga Toledano

Pgina 18 de 19

Estrategias de Programacin y Estructuras de Datos


Conceptos Fundamentales de Algoritmia y Estructuras de Datos
Tema 1. Estructuras de Datos Bsicas

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/)

Curso 2.016 EPED

Jos Ignacio Mayorga Toledano

Pgina 19 de 19

Potrebbero piacerti anche