Sunteți pe pagina 1din 27

UNIVERSIDAD DE ORIENTE

NUCLEO DE ANZOATEGUI
EXTENSION REGION CENTRO-SUR
ESCUELA DE INGENIERIA
DEPARTAMENTO DE SISTEMA

LISTAS, PILAS, COLAS Y RBOLES BINARIOS.

Bachilleres:

Profesor:
Eduardo Correa

Camero Jos

C.I. 24.228.353

Mitarotonda Zhoannys C.I. 25.589.632


Rosario Jos

C.I. 24.230.137

Abril, 2016

ndice

ndice

Introduccin

Listas

Tipos de Listas

Pilas

Implementacin de pilas mediante listas enlazadas

12

Colas

14

Colas enlazadas

15

rboles Binarios

17

Equilibrio

17

rboles binarios completos

18

Operaciones bsicas de los rboles binarios

19

Estructura de un rbol binario

20

Algoritmos de modificacin

21

Insercin

21

Eliminacin

22

Conclusin

25

Bibliografa

26

Introduccin

En el presente daremos a conocer de manera breve y detallada los conceptos bsicos


que se incluyen en la estructura de datos, pudiendo as entender para que se usan y
que utilidad tienen al momento de resolver un problema, teniendo como objetivo
principal ahorrar tiempo al momento de detectar algn registro y la manipulacin
satisfactoria de un sistema, haciendo nfasis en los conjuntos de pilas, colas, listas y
todos sus tipos, as como rboles binarios y sus aplicaciones.

Listas.

Una lista es una secuencia de elementos dispuestos en un cierto orden, en la que


cada elemento tiene como mucho un predecesor y un sucesor. El nmero de
elementos de la lista no suele estar fijado, ni suele estar limitado por anticipado. Se
representa la estructura de datos de forma grfica con cajas y flechas. Las cajas son
los elementos y las flechas simbolizan el orden de los elementos.

La estructura de datos debe permitir determinar cul es el primer elemento y el


ltimo de la estructura, cul es su predecesor y su sucesor (si existen de cualquier
elemento dado). Cada uno de los elementos de informacin suele denominarse nodo.

La lista tambin puede representarse de forma simblica escribiendo sus


elementos separados por comas y encerrados entre corchetes. Por ejemplo:
["rojo","verde","azul","amarillo"]

Las listas admiten ciertas operaciones como son insertar un nodo adicional, borrar
un nodo, etc. En funcin de la forma de insertar nuevos elementos y acceder a los
existentes se tienen distintos tipos de listas. A continuacin se ver qu operaciones
bsicas se pueden realizar sobre las listas. Se tratarn las operaciones que permiten
insertar y borrar elementos nicamente al principio de la misma, por lo que las

operaciones de acceso, insercin y supresin de elementos en cualquier posicin de la


lista no se consideran bsicas pero podrn ser tratadas mediante recursin.
Las operaciones bsicas sobre una lista son:

EsVacia Averiguar si la lista est vaca.

Insertar Aade un elemento al principio de la lista.

Primero Obtener el valor del primer elemento de la lista, tambin llamado


cabeza.

Resto Devuelve el trozo de lista resultado de eliminar el primer elemento de


la lista.

Borrar Borra el primer elemento de la lista.

Las listas pueden ser circulares, con el ltimo elemento apuntando al primero, o
pueden tener un campo que contenga el nmero de nodos que hay en la lista, y se
pueden definir de muchas formas. Podran definirse a partir de un vector teniendo un
acceso rpido aunque con un nmero de elementos limitado por la dimensin del
vector.

Otra forma de definir una lista es de forma recursiva. Resulta menos eficiente que
definirla a partir de un vector sin embargo no impone restricciones en cuanto a su
longitud. As se define en Java cada uno de los elementos de la lista:

Puede observase como esta estructura se corresponde con las cajas anteriormente
vistas en la representacin de listas. Se observa que tiene dos atributos,
el elemento que se almacena en cada nodo y el Nodo siguiente en el orden de la lista.
A continuacin se implementan los mtodos de la clase para manipular los nodos:
Nodo.java
El constructor crea un nodo a partir de un objeto y el siguiente nodo al que va a
estar enlazado. Las operaciones cambiar Elemento y cambiar Siguiente cambian los
valores de los campos del objeto. Por ltimo Siguiente y Elemento devuelven el
contenido del nodo.
A partir de esta clase se implementara la lista como una cadena de nodos:

ListaEnlazada.java

Ha de notarse como el constructor inicializa la lista a null. Este va a ser tambin el


final de la lista. De forma que cuanto el principio y final de la lista coincidan la lista
estar vaca.
Se ver a continuacin algunas implementaciones distintas de listas. Se debe
prestar especial inters a los mecanismos de implementacin, pues las distintas
operaciones pueden cambiar de una implementacin a otra, sin embargo, la forma no.

Hay varios tipos de listas, las hay enlazadas, no enlazadas, ordenadas y no


ordenadas. Se van a estudiar las listas enlazadas, tanto ordenadas como no ordenadas.
La diferencia que existe entre las listas enlazadas y las no enlazadas es que las
enlazadas utilizan punteros, es decir, asignacin dinmica de memoria, lo que
optimiza la gestin de la misma. Una lista no enlazada es un simple array, y por lo
tanto es un bloque contiguo de memoria, mientras que una lista enlazada es un
conjunto de nodos que no tienen por qu ocupar posiciones contiguas de memoria.
La diferencia entre listas ordenadas y no ordenadas es obvia, las ordenadas mantienen
cierto orden entre sus elementos.
Tipos de Listas:
1) Lista simple: Las listas son estructuras de datos que permiten tener cierta
flexibilidad en su manejo, pueden crecer o acortarse segn se lo requiera,
existen varias formas de implementar una lista en Java, en este caso se

presenta un ejemplo en cdigo utilizando punteros mediante la referencia a


objetos.
Las listas bsicamente se forman del enlace de nodos los cuales funcionan como
contenedores para almacenar el valor y enlace al siguiente nodo.
2) Lista doblemente enlazada: Las listas doblemente enlazadas son estructuras de
datos semejantes a las listas enlazadas simples. La asignacin de memoria es
hecha al momento de la ejecucin. En cambio, en relacin a la listas enlazada
simple el enlace entre los elementos se hace gracias a dos punteros (uno que
apunta hacia el elemento anterior y otro que apunta hacia el elemento
siguiente).
Cada nodo tiene dos enlaces:

Uno apunta al nodo anterior, o apunta al valor NULL si es el primer nodo.


Otro que apunta al nodo siguiente o apunta al valor NULL si es el ltimo nodo

3) Lista cclica o bucles: El primer y ltimo nodo est unido. Se puede empezar
por cualquier nodo y seguir la lista en cualquier direccin hasta que se regrese
hasta el nodo original. Vistas como listas sin comienzo ni fin, usado para
dirigir buffers para ingerir datos, y para visitar todos los nodos de una lista a
partir de uno dado. Una lista enlazada circular que contiene tres valores
enteros.
4) Listas enlazadas circulares simples. Cada nodo tiene un enlace. El siguiente
nodo del ltimo apunta al primero. Como es una lista enlazada simple, los
nuevos nodos pueden ser solo eficientemente insertados despus de uno que

ya tengamos referenciado. Permite rpidas inserciones al principio y tambin


permite accesos al primer nodo desde el puntero de ltimo nodo.

Pilas.

La pila es una secuencia de elementos del mismo tipo en la que el acceso a la


misma se realiza por un nico lugar denominado cima.
Se observa como el acceso a los elementos de la pila se realiza siempre sobre un
nico extremo. Las operaciones que caracterizan la pila son las de introducir un
nuevo elemento sobre la cima (push) y la de extraer el elemento situado en la cima
(pop). Una forma de ver esta estructura de datos es como una pila de libros en la que
slo se puede coger el libro que est en la cima o apilar ms libros sobre la misma,
pero los libros que sostienen la pila no son accesibles pues de otro modo todo se
desmoronara.
El interfaz en Java que define esta clase de objetos y sus mtodos son los
siguientes:
Pila.java

Existen dos implementaciones de pila, mediante arrays y listas enlazadas.

Implementacin de pilas mediante arrays


Implementacin una Pila mediante un vector:
PilaArray.java

La dimensin de la pila se establece al crear la pila, mediante el constructor. En el


siguiente ejemplo crea una pila con capacidad para 125 elementos

PilaArray pila_de_ejemplo = new PilaArray(125);

Si se hubiera usado el constructor por defecto se hubiera establecido el tamao de


la pila en 1000 elementos.
Se definir un campo privado top para conocer en todo momento cul es la cima
de la pila. De esta forma, si queremos aadir un nuevo elemento a la pila (push) lo

10

haremos en la posicin siguiente a la que nos indica este campo. Se observa como
slo se inserta un nuevo elemento sobre la cima cuando hay espacio suficiente, es
decir la longitud de la pila es menor que su capacidad. Primero se incrementa el valor
del campo top y despus se inserta el elemento en la pila.

Para implementar las operaciones pop y primero se comprueba que la lista no es


vaca, en cuyo caso se devuelve un valor nulo (null). Para el caso de pop se
decrementa la variable top para eliminar el objeto de la cima, mientras que para
primero no, puesto que en este ltimo slo se est consultando la cima.

Implementacin de pilas mediante listas enlazadas

Se utilizar ahora la clase Nodo definida anteriormente para ver esta otra
implementacin la cual ser llamada PilaEnlazada. Los campos a definir para esta
11

clase son top, que almacena el nodo que est en la cima de la pila y la longitud de la
misma.

PilaEnlazada.java

A continuacin se ver cmo se insertan los nodos por la cima de la pila. Para ello
se crea un nuevo nodo y se le asigna como siguiente nodo la antigua cima de la pila.
El siguiente paso es actualizar la cima de la pila con el nuevo nodo creado.

12

El funcionamiento del pop es el siguiente. Si la lista es vaca devuelve un valor


nulo. En caso contrario actualiza la cima al siguiente elemento por debajo del nodo
situado en la cima y devuelve el valor del nodo cima:

El mecanismo que sigue el mtodo primero es similar al visto en el pop, aunque se


elimina la cima, nicamente se devuelve su valor:

Colas

13

Es una estructura de datos, caracterizada por ser una secuencia de elementos en la


que la operacin de insercin push se realiza por un extremo y la operacin de
extraccin pop por el otro. Tambin se le llama estructura FIFO del ingls First In
First Out, debido a que el primer elemento en entrar ser tambin el primero en salir.
Las colas se utilizan en sistemas informticos, transportes y operaciones de
investigacin entre otros, dnde los objetos, personas o eventos son tomados como
datos que se almacenan y se guardan mediante colas para su posterior procesamiento.
Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a
objetos mediante clases, en forma de listas enlazadas.
Los elementos de la cola se aaden y se eliminan de tal manera que el primero en
entrar es el primero en salir. La adicin de elementos se realiza a travs de una
operacin llamada encolar (enqueue), mientras que la eliminacin se denomina
desencolar (dequeue). La operacin de encolar inserta elementos por un extremo de
la cola, mientras que la de desencolar los elimina por el otro.
El siguiente interfaz muestra las operaciones tpicas para colas:
Cola.java

La siguiente es una posible implementacin de colas mediante la clase Nodo:


ColaEnlazada.java

14

Se observa como la clase Cola contiene dos campos, cola y cabecera que apuntan
al principio y al final de la cola. La cabecera se utiliza para extraer elementos. En
cambio para insertar, se usa la cola.
La operacin encolar crea un nodo cuyo sucesor es nulo. Esto es porque se aade
al final de la cola, es decir, donde apunta el campo cola. Si la cola est vaca, la
cabecera y la cola apuntan al mismo objeto Nodo.

15

Para eliminar (desencolar) y para consultar (cabecera) se utiliza el campo


cabecera. Se extraen/consultan elementos de la cabeza de la cola.

16

rboles binarios.

Un rbol binario es un rbol cuyos nodos no pueden tener ms de dos subrboles.


En un rbol binario, cada nodo puede tener, cero, uno o dos hijos (subrboles). Se
conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo
derecho. La siguiente grfica, muestra un rbol binario.

Un rbol binario es una estructura recursiva. Cada nodo es la raz de su propio


subrbol y tiene hijos, que son races de rboles, llamados subrbol derecho e
izquierdo del nodo, respectivamente. En cualquier nivel n, un rbol binario puede
contener de 1 a 2 nodos. El nmero de nodos por nivel contribuye a la densidad del
rbol.

Equilibrio
La distancia de un nodo a la raz determina la eficiencia con la que puede ser
localizado. Dado un nodo, se lo puede localizar mediante un solo camino de
bifurcacin de ramas. Esta caracterstica conduce al concepto de balance o equilibrio.
Para determinar si un est equilibrado se calcula su factor de equilibrio.

El factor de equilibrio de un rbol binario es la diferencia en altura entre los


subrboles derecho e izquierdo. Si la altura del subrbol izquierdo es hI, y la altura
del subrbol derecho es hD, entonces el factor de equilibrio del rbol B se determina
por la siguiente frmula:

17

B=h D h I
Utilizando esta frmula, el equilibrio del nodo raz de la figura 1 es 0.

Un rbol est perfectamente equilibrado si su equilibrio o balance es cero y sus


subrboles son tambin perfectamente equilibrados. Dado que esta condicin ocurre
raramente se dice que un rbol est equilibrado si la altura de sus subrboles difiere
en no ms de uno y sus subrboles son tambin equilibrados; por lo tanto, el factor de
equilibrio de cada nodo puede tomar los valores -1, 0, +1.

Arboles binario completos

Un rbol binario completo de profundidad n es un rbol en el que cada nivel, del 0


al nivel n-1, tiene un conjunto lleno de nodos, y todos los nodos hoja a nivel n ocupan
las posiciones ms a la izquierda del rbol. Un rbol binario completo que contiene
2^n nodos a nivel n es un rbol lleno. Un rbol lleno es un rbol binario que tiene el
mximo nmero de entradas para su altura.
Un rbol degenerado es aquel que cada nodo contiene solo un hijo. Un rbol
degenerado es equivalente a una lista enlazada.
La siguiente grfica muestra la clasificacin de rboles binarios.

18

La altura o profundidad de un rbol binario completo de n nodos se calcula


mediante la siguiente frmula:
h=||log 2 n||+ 1

Operaciones bsicas arboles binarios.

Las operaciones comunes en rboles son:

Enumerar todos los elementos.


Buscar un elemento.
Dado un nodo, listar los hijos (si los hay).
Borrar un elemento.
Eliminar un subrbol (algunas veces llamada podar).

19

Aadir un subrbol (algunas veces llamada injertar).


Encontrar la raz de cualquier nodo.

Estructura de un rbol binario.


Un rbol es binario si cada nodo tiene como mximo 2 descendientes.

Para cada nodo est definido el subrbol izquierdo y el derecho.


Para el nodo A, el subrbol izquierdo est constituido por los nodos B, D y E. Y el
subrbol derecho est formado por los nodos C y F. Lo mismo para el nodo B tiene el
subrbol izquierdo con un nodo (D) y un nodo en el subrbol derecho (E). El nodo D
tiene ambos subrboles vacos. El nodo C tiene el subrbol izquierdo vaco y el
subrbol derecho con un nodo (F).

Una de las operaciones ms importantes que se realiza en un rbol binario es el


recorrido de los mismos. Recorrer significa visitar los nodos del rbol en forma
ordenada, de tal manera que todos los nodos del mismo sean visitados una sola vez.
Existen tres formas diferentes de efectuar el recorrido y todas ellas de naturaleza
recursiva; estas son:
a) Recorrido en pre orden:
Visitar la raz
Recorrer el subrbol izquierdo

20

Recorrer el subrbol derecho


b) Recorrido en desorden:
Recorrer el subrbol izquierdo
Visitar la raz
Recorrer el subrbol derecho

c) Recorrido en post orden:


Recorrer el subrbol izquierdo
Recorrer el subrbol derecho
Visitar la raz

Algoritmos de modificacin: Insercin y eliminacin.

Insercin
Se trata de crear un nuevo nodo en la posicin que le corresponda segn el criterio
de rbol binario de bsqueda. A continuacin se muestra el algoritmo.

static NodoArbol insertar (NodoArbol arbol, int dato) {


NodoArbol resul = arbol;
if (arbol != null)
if (arbol.clave < dato)
arbol.de = insertar (arbol.de, dato);
else if (arbol.clave > dato)
arbol.iz = insertar (arbol.iz, dato);
21

else System.out.println ("la clave ya existe");


else resul = new NodoArbol (dato);
return resul;
}
public void insertar (int dato) {
raiz = insertar (raiz, dato);
}

Eliminacin.
La eliminacin de un nodo en un rbol binario de bsqueda implica una
reorganizacin posterior del mismo con el objeto de que una vez eliminado el nodo el
rbol mantenga su naturaleza de bsqueda. Para ello se procede de la manera
siguiente:
A continuacin se muestra el cdigo del algoritmo de eliminacin.

static class Eliminar {


static NodoArbol eliminar2Hijos (NodoArbol arbol, NodoArbol p) {
NodoArbol resul;
if (arbol.de != null) {
resul = arbol;

22

arbol.de = eliminar2Hijos (arbol.de, p);


}
else {
p.clave = arbol.clave;
resul = arbol.iz;
}
return resul;
}
static NodoArbol eliminarElemento (NodoArbol arbol, int elem) {
NodoArbol p;
if (arbol != null)
if (arbol.clave > elem)
arbol.iz = eliminarElemento (arbol.iz, elem);
else if (arbol.clave < elem)
arbol.de = eliminarElemento (arbol.de, elem);
else {
p = arbol;
if (arbol.iz == null)
arbol= arbol.de;

23

else if (arbol.de == null)


arbol = arbol.iz;
else arbol.iz = eliminar2Hijos (arbol.iz, p);
}
else System.out.println ("la clave buscada no existe");
return arbol;
}
}
public void eliminar (int elem) {
raiz = Eliminar.eliminarElemento (raiz, elem);
}

24

Conclusin

La implementacin de una aplicacin basada en listas simplemente enlazadas,


tambin supone un fcil desarrollo, es especial si se trabaja con lenguajes de
programacin como Java , dada las facilidades que brinda al momento de trabajar con
este tipo de estructuras, un ejemplo es la facilidad, eficacia y rapidez para eliminar un
nodo de la lista, ya que con otras herramientas, lo ms probable sea tener que soltar el
enlace nodo por nodo, mientras que en Java, solo soltamos el enlace del nodo que
queremos eliminar.

Las listas simplemente enlazadas, as como tambin otro tipo de estructuras


similares, son tiles a la hora de trabajar problemas como pilas y colas, ya que se
maneja la misma lgica de agregar, borrar o buscar elementos. Algunos ejemplos
pueden ser la fila para el cine o un banco, en donde tal vez se necesite de estas tres
funciones principales de listas simplemente enlazadas, para registrar quien es el
primero de la lista, el ltimo, el tiempo que lleva en espera, etc.

A pesar, de que podramos trabajar con rboles y/o grafos, cuando se trata de listas
simplemente enlazadas, lo ms probable es que tanto nuestro rbol, como nuestro
grafo, adquieran una caracterstica lineal.

25

Bibliografa
Roldn, A. Pilas en Java {Blog}. Consultado el 20 de Abril del
2016 en: http://www.ciberaula.com/articulo/pilas_en_java
Roldn, A. Listas en Java {Blog}. Consultado el 20 de Abril del
2016 en: http://www.ciberaula.com/articulo/listas_en_java
Roldn, A. Colas en Java {Blog}. Consultado el 20 de Abril del
2016 en: http://www.ciberaula.com/articulo/colas_en_java
Roldn, A. rboles en Java {Blog}. Consultado el 20 de Abril del
2016 en: http://www.ciberaula.com/articulo/arboles/
Wikipedia. (2015). Tipo de dato abstracto {Blog}. Consultado el
20 de Abril del 2016 en: https://es.wikipedia.org/wiki/Tipo_de_dato_abstracto
Wikipedia. (2016). Tipo de dato {Blog}. Consultado el 20 de Abril
del 2016 en: https://es.wikipedia.org/wiki/Tipo_de_dato
Wikipedia. (2016). rbol binario {Blog}. Consultado el 20 de
Abril del 2016 en: https://es.wikipedia.org/wiki/%C3%81rbol_binario
Mac. (2014). Teora de sistemas {Blog}. Consultado el 20 de
Abril del 2016 en: http://www.aprenderaprogramar.com/foros/index.php?
topic=1367.5;wap2
Wikipedia. (2016). Arboles binarios En Java recorrido preorden
postorden inorden {Foro}. Consultado el 20 de Abril del 2016 en:
http://escritura.proyectolatin.org/estructura-de-datos/conceptos-de-arboles-binarios/
Autor Desconocido.
Virtual}.

Consultado

Estructuras de Datos: rboles {Libro


el

20

de

Abril

del

2016

en:

http://ocw.upm.es/lenguajes-y-sistemas-informaticos/estructuras-dedatos/contenidos/tema4nuevo/Arboles.pdf

26

Rosales, D. (2013). Arboles en Java: Recorrido Preorden, Inorden


y Postorden {Blog}. Consultado el 20 de Abril del 2016 en:
http://javacodebasics.blogspot.com/2013/03/arboles-en-java-recorrido-preorden.html

27

S-ar putea să vă placă și