You are on page 1of 12

M.

Aldea
EstructurasdeDatos Oct-13 1
Estructuras de Datos
Tema 1. Introduccin
Tema 2. Anlisis de Algoritmos
Tema 3. Listas
Tema 4. Pilas y Colas
Tema 5. rboles
Tema 6. TDAs ordenados
Tema 7. Mapas
Tema 8. Conjuntos, Bolsas y Listas sin repeticin
Tema 9. Grafos
Tema4. Pilas y Colas

M. Aldea
EstructurasdeDatos Oct-13 2
Tema 4. Pilas y Colas
4.1. TDA Pila
4.2. Implementacin de Pilas basada en array
4.3. Implementacin de Pilas basada en celdas enlazadas
4.4. TDA Cola
4.5. Implementacin de Colas basada en array circular
4.6. Implementacin de Colas basada en celdas enlazadas
4.7. Comparacin de las implementaciones
4.8. Pilas y Colas en Java Collections Framework
4.9. Bibliografa
Tema4. Pilas y Colas

M. Aldea
EstructurasdeDatos Oct-13 3
Objetivos
Conocer los TDAs Pila y Cola
Conocer las tcnicas bsicas de implementacin de Pilas y
Colas: basadas en array y basadas en estructuras enlazadas
Conocer las ventajas e inconvenientes de las distintas tcnicas
de implementacin de acuerdo a su complejidad espacial y
temporal
Conocer el soporte proporcionado para Pilas y Colas en las
Java Collections
Saber elegir el TDA Pila o Cola y su implementacin que mejor
satisfaga los requisitos de una aplicacin
Tema4. Pilas y Colas
4.1 TDA Pila
M. Aldea
EstructurasdeDatos Oct-13 4
4.1 TDA Pila
Coleccin de elementos potencialmente repetidos donde la
posicin de cada elemento es relevante y las inserciones y
eliminaciones slo se pueden realizar en una posicin
denominada cima
Es decir, los elementos se aaden y extraen en orden LIFO
(last-in-first-out, el ltimo en entrar es el primero en salir)
A
B
C
D
A
B
C
D
A
B
C
D
A
B
C
D
E E
F
E
cima
desapila() apila(F)
cima
cima
cima
apila(E)
Tema4. Pilas y Colas
4.1 TDA Pila
M. Aldea
EstructurasdeDatos Oct-13 5
Operaciones de las pilas
// aade el elemento en la cima de la pila
apila(e: Elemento)
// elimina y retorna el elemento que ocupaba la
// la cima. La cima pasa al siguiente elemento
desapila(): Elemento
// retorna (pero no elimina) el elemento que
// ocupa la cima. La cima no cambia.
cima(): Elemento
// vaca la pila (pasa a tener tamao 0)
haceVaca()
// retorna el tamao de la pila (num. elementos)
tamao(): Entero
// indica si la pila est vaca
estVaca(): Booleano
Tema4. Pilas y Colas
4.1 TDA Pila
M. Aldea
EstructurasdeDatos Oct-13 6
Implementaciones de pilas
Pila
<<interface>>
E
+apila(e: E)
+desapila(): E
+cima(): E
+haceVaca(): void
+tamao(): Entero
+estVaca(): Bool
PilaArray
E
PilaSimpleEnlace
E
Tema4. Pilas y Colas
4.1 TDA Pila
M. Aldea
EstructurasdeDatos Oct-13 7
Uso de pilas
*
-platos PlatosParaFregar
+dejaPlato(p: Plato)
Plato
{ordered, nonunique}
Pila de platos para fregar
+cogePlato():Plato
<<PilaArray>>
*
-operaciones
OperacionesDeEdicin
+registraOp(Op: OperacinDeEdicin)
OperacinDeEdicin
{ordered, nonunique}
Pila de operaciones de edicin para implementar el deshacer de un editor de texto
+ltimaOp(): OperacinDeEdicin
<<PilaSimpleEnlace>>
Tema4. Pilas y Colas
4.2 Implementacin dePilas basadaen array
M. Aldea
EstructurasdeDatos Oct-13 8
4.2 Implementacin de Pilas basada en array
Array de elementos y cursor que indica la cima de la pila
cuando la pila est vaca cima=-1
elementos : Elemento[N]
cima : Entero
Elemento ms viejo
cima=c
Segundo elemento ms viejo
Segundo elemento ms nuevo
Elemento ms nuevo
...
0
1
...
N-1
parte libre
parte ocupada
c
c-1
c+1
elementos
Tema4. Pilas y Colas
4.2 Implementacin dePilas basadaen array
M. Aldea
EstructurasdeDatos Oct-13 9
Implementacin dePilas basadaen array (cont.)
procedimiento apila(e: Elemento)
si tamao() = N entonces
error // no caben ms elementos
fsi
cima := cima + 1
elementos[cima] := e
fprocedimiento
procedimiento desapila(): Elemento
si estVaca() entonces
error // no hay elementos
fsi
cima := cima - 1
retorna elementos[cima+1]
fprocedimiento
Tema4. Pilas y Colas
4.2 Implementacin dePilas basadaen array
M. Aldea
EstructurasdeDatos Oct-13 10
Implementacin dePilas basadaen array (cont.)
procedimiento haceVaca()
cima := -1
fprocedimiento
procedimiento tamao(): Entero
retorna cima + 1
fprocedimiento
procedimiento estVaca(): Booleano
retorna cima = -1
fprocedimiento
procedimiento cima(): Elemento
si estVaca() entonces
error
fsi
retorna elementos[cima]
fprocedimiento
Tema4. Pilas y Colas
4.3 Implementacin dePilas basadaen celdas enlazadas
M. Aldea
EstructurasdeDatos Oct-13 11
4.3 Implementacin de Pilas basada en celdas
enlazadas
Implementacin directa y eficiente (O(1)) utilizando celdas
simplemente enlazadas
inserciones y extracciones por la cabeza de la lista de celdas
c b a
cima
apila(d)
c b a
cima
d
desapila() retorna d
c b a
cima
Tema4. Pilas y Colas
4.4 TDA Cola
M. Aldea
EstructurasdeDatos Oct-13 12
4.4 TDA Cola
Coleccin de elementos potencialmente repetidos donde la
posicin de cada elemento es relevante, las inserciones slo se
pueden realizar por el final y las eliminaciones por el frente
Es decir, los elementos se aaden y extraen en orden FIFO
(first-in-first-out, el primero en entrar es el primero en salir)
a b d c
e
frente final
encola(e)
desencola() retorna a
a b d c
frente final
b c e d
frente final
Tema4. Pilas y Colas
4.4 TDA Cola
M. Aldea
EstructurasdeDatos Oct-13 13
Operaciones de las colas
// aade el elemento al final de la cola
encola(e: Elemento)
// elimina y retorna el elemento que ocupaba el
// frente. El siguiente elemento pasa al frente
desencola(): Elemento
// retorna (pero no elimina) el elemento que
// ocupa el frente. El frente no cambia.
frente(): Elemento
// vaca la cola (pasa a tener tamao 0)
haceVaca()
// retorna el tamao de la cola (num. elementos)
tamao(): Entero
// indica si la cola est vaca
estVaca(): Booleano
Tema4. Pilas y Colas
4.4 TDA Cola
M. Aldea
EstructurasdeDatos Oct-13 14
Implementaciones de colas
Cola
<<interface>>
E
+encola(e: E)
+desencola(): E
+frente(): E
+haceVaca(): void
+tamao(): Entero
+estVaca(): Bool
ColaArray
E
ColaSimpleEnlace
E
Tema4. Pilas y Colas
4.4 TDA Cola
M. Aldea
EstructurasdeDatos Oct-13 15
Uso de colas
*
-clientes
Cliente
{ordered}
Cola de la caja de un supermercado
<<ColaArray>>
*
-trabajos
TrabajoImpresin
{ordered, nonunique}
Cola de trabajos pendientes en una impresora
<<ColaSimpleEnlace>>
ClientesCaja
TrabajosPendientes
Tema4. Pilas y Colas
4.5 Implementacin deColas basadaen array circular
M. Aldea
EstructurasdeDatos Oct-13 16
4.5 Implementacin de Colas basada en array
circular
Array de elementos y dos cursores que indican el frente y el final
array circular : cuando un cursor sobrepasa la ltima posicin
del array, vuelve a la primera
elementos : Elemento[N]
frente, final : Entero
Ejemplo. Dos configuraciones de cola vlidas:
0 1 2 3 4 5
a
6
b
7
c
8
d
9
e
10 11 12 13 14 15
frente=6 final=10
k
0
l
1
m
2
n
3 4 5 6 7 8 9 10 11 12 13
i
14
j
15
frente=14 final=3
Tema4. Pilas y Colas
4.5 Implementacin deColas basadaen array circular
M. Aldea
EstructurasdeDatos Oct-13 17
Implementacin deColas basadaen array circular (cont.)
b
0 1 2 3 4 5
a
6
frente
final
b
0
c
1 2 3 4 5
a
6
final
b
0
c
1 2 3 4 5 6
final
frente
0 1 2 3 4 5 6
final
frente
encola(c)
desencola()a
frente
0
c
1 2 3 4 5 6
final
frente
desencola()b
desencola()c
Tema4. Pilas y Colas
4.5 Implementacin deColas basadaen array circular
M. Aldea
EstructurasdeDatos Oct-13 18
Deteccin de cola vaca/llena
Hay dos opciones:
Llevando un contador con el nmero de elementos
-Necesidad de una variable extra (el contador)
+Se puede llenar el array totalmente
Utilizando la posicin relativa de los cursores
+No hace falta ninguna variable extra
-Siempre debe quedar, al menos, una posicin libre en el array
Son soluciones equivalentes
no hay un acuerdo general sobre cual es mejor
unas implementaciones/libros eligen una y otros otra
Tema4. Pilas y Colas
4.5 Implementacin deColas basadaen array circular
M. Aldea
EstructurasdeDatos Oct-13 19
Deteccin de cola vaca/llena con los cursores
Vaca cuando frente est en la posicin siguiente a final
(final + 1) mod N = frente
Problema: en una cola totalmente llena tambin se cumple que
frente est en la posicin siguiente a final
Solucin: no se permite llenar la cola del todo
Llena cuando frente est dos posiciones por delante de final
(final + 2) mod N = frente
Tamao de la cola: (N - frente + final + 1) mod N
0 1 2 3 4 5 6
final
frente
e
0
f
1
g
2
a
3
b
4
c
5
d
6
frente
final
e
0
f
1 2
a
3
b
4
c
5
d
6
frente
final
Tema4. Pilas y Colas
4.5 Implementacin deColas basadaen array circular
M. Aldea
EstructurasdeDatos Oct-13 20
Implementacin con contador de elementos
procedimiento haceVaca()
tamao := 0
frente := 0
final := N - 1
fprocedimiento
procedimiento tamao(): Entero
retorna tamao
fprocedimiento
procedimiento estVaca(): Booleano
retorna tamao = 0
fprocedimiento
0 1 2 3 4 5 6
final
frente
tamao=0
Tema4. Pilas y Colas
4.5 Implementacin deColas basadaen array circular
M. Aldea
EstructurasdeDatos Oct-13 21
Implementacin con contador deelementos (cont.)
procedimiento frente(): Elemento
si estVaca() entonces
error
fsi
retorna elementos[frente]
fprocedimiento
procedimiento desencola(): Elemento
si estVaca() entonces
error
fsi
tamao := tamao - 1
Elemento temp := elementos[frente]
frente := (frente + 1) mod N
retorna temp
fprocedimiento
Tema4. Pilas y Colas
4.5 Implementacin deColas basadaen array circular
M. Aldea
EstructurasdeDatos Oct-13 22
Implementacin con contador deelementos (cont.)
procedimiento encola(e: Elemento)
si tamao() = N entonces
error
fsi
tamao := tamao + 1
final := (final + 1) mod N
elementos[final] := e
fprocedimiento
mod: operador mdulo (en Java es el operador % )
resto de la divisin entera
7 mod 4 = 3
18 mod 9 = 0
0 mod 4 = 0
Tema4. Pilas y Colas
4.6 Implementacin deColas basadaen celdas enlazadas
M. Aldea
EstructurasdeDatos Oct-13 23
4.6 Implementacin de Colas basada en celdas
enlazadas
Implementacin directa y eficiente utilizando celdas simplemente
enlazadas
inserciones por el final y extracciones por el principio de la lista
a b c
frente
encola(d)
b c d
frente
a
desencola() a
b c d
frente
final
final
final
Tema4. Pilas y Colas
4.6 Implementacin deColas basadaen celdas enlazadas
M. Aldea
EstructurasdeDatos Oct-13 24
Implementacin deColas basadaen celdas enlazadas (cont.)
Implementacin con celda de cabecera
tipo Celda
contenido : puntero a Elemento
siguiente : puntero a Celda
ftipo
frente : puntero a Celda
final : puntero a Celda
numEle : Entero
procedimiento Constructor
numEle := 0
frente := nueva Celda
frente.siguiente := null
final := frente
fprocedimiento
null
frente
final
Tema4. Pilas y Colas
4.6 Implementacin deColas basadaen celdas enlazadas
M. Aldea
EstructurasdeDatos Oct-13 25
Implementacin deColas basadaen celdas enlazadas (cont.)
procedimiento encola(e : Elemento)
nuevaCelda : puntero a Celda := nueva Celda
nuevaCelda.contenido := e
numEle++
final.siguiente := nuevaCelda
final := nuevaCelda
fprocedimiento
procedimiento desencola(): Elemento
si estVaca() entonces
error
fsi
numEle--
frente := frente.siguiente
retorna frente.contenido
fprocedimiento
a
frente
final
encola(z)
a
frente
z
final
a
frente
b
final
desencola()
frente
b
final
a
Tema4. Pilas y Colas
4.6 Implementacin deColas basadaen celdas enlazadas
M. Aldea
EstructurasdeDatos Oct-13 26
Implementacin deColas basadaen celdas enlazadas (cont.)
procedimiento frente(): Elemento
si estVaca() entonces
error
fsi
retorna frente.siguiente.contenido
fprocedimiento
procedimiento estVaca(): Boolean
retorna numEle = 0
fprocedimiento
procedimiento haceVaca()
numEle := 0
frente := final
fprocedimiento
a
frente
b
final
haceVaca()
a
frente
b
final
Tema4. Pilas y Colas
4.7 Comparacin delas implementaciones
M. Aldea
EstructurasdeDatos Oct-13 27
4.7 Comparacin de las implementaciones
Eficiencia temporal de las operaciones:
Es algo ms rpida la implementacin basada en array
Operacin
pila/cola
Array y Lista enlazada
apila/encola O(1)
desapila/desencola O(1)
cima/frente O(1)
tamao O(1)
haceVaca O(1)
estVaca O(1)
Tema4. Pilas y Colas
4.7 Comparacin delas implementaciones
M. Aldea
EstructurasdeDatos Oct-13 28
Comparacin delas implementaciones (cont.)
Caractersticas generales:
En general la implementacin con array es ms sencilla y eficiente
debera usarse siempre que se tenga bien acotada la longitud
mxima que puede alcanzar la pila/cola
Caracterstica Array Lista Enlazada
Requisitos de memoria
O(N), donde N es el tamao del
array de elementos
O(n), donde n es el nmero
de elementos en la pila
Fcil crecimiento
No, requiere
redimensionado y copia
S, puesto que
no est acotada
Aprovechamiento de la
memoria
Desperdicia
memoria
Usa la memoria
justa
Tema4. Pilas y Colas
4.8 Pilas y Colas en J avaCollections Framework
M. Aldea
EstructurasdeDatos Oct-13 29
4.8 Pilas y Colas en Java Collections
Framework
Cola
Pila
JCF NO incluye la
interfaz Stack (Pila)
<<interface>>
Collection
<<interface>>
Queue
<<interface>>
Iterable E
E
E
LinkedList
E
Tema4. Pilas y Colas
4.8 Pilas y Colas en J avaCollections Framework
M. Aldea
EstructurasdeDatos Oct-13 30
Pilas en JCF
JFC no incluye ninguna interfaz especfica para las pilas
Utilizaremos LinkedList
public class PlatosParaFregar {
private LinkedList<Plato> platos =
new LinkedList<Plato>();
...
*
-platos PlatosParaFregar
+dejaPlato(p: Plato)
Plato
{ordered, nonunique}
+cogePlato():Plato
<<LinkedList>>
Tema4. Pilas y Colas
4.8 Pilas y Colas en J avaCollections Framework
M. Aldea
EstructurasdeDatos Oct-13 31
Pilas en J CF (cont.)
De la clase LinkedList usaremos los mtodos:
void addFirst(E e); // apila
E removeFirst(); // desapila
// si cola vaca: lanza excepcin
E getFirst(); // cima
// si cola vaca: lanza excepcin
void clear(); // haceVaca
int size(); // tamao
boolean isEmpty(); // estVaca
Tema4. Pilas y Colas
4.8 Pilas y Colas en J avaCollections Framework
M. Aldea
EstructurasdeDatos Oct-13 32
Colas en JCF
Interfaz Queue, utilizando su implementacin LinkedList
public class TrabajosPendientes {
private Queue<TrabajoImpresin> trabajos =
new LinkedList<TabajoImpresin>();
...
*
-trabajos
TrabajoImpresin
{ordered, nonunique}
<<LinkedList>>
TrabajosPendientes
Tema4. Pilas y Colas
4.8 Pilas y Colas en J avaCollections Framework
M. Aldea
EstructurasdeDatos Oct-13 33
Colas en J CF (cont.)
public interface Queue<E> extends Collection<E> {
// encola
boolean offer(E e);// si cola llena: retorna false
boolean add(E e);// si cola llena: lanza excepcin
// frente
E peek(); // si cola vaca: retorna null
E element(); // si cola vaca: lanza excepcin
// desencola
E poll(); // si cola vaca: retorna null
E remove(); // si cola vaca: lanza excepcin
}
Adems, de Collection hereda los mtodos:
void clear(); // haceVaca
int size(); // tamao
boolean isEmpty(); // estVaca
Tema4. Pilas y Colas
4.9 Bibliografa
M. Aldea
EstructurasdeDatos Oct-13 34
4.9 Bibliografa
[1] Michael T. Goodrich, Roberto Tamassia, Data structures and
algorithms in Java. John Wiley & Sons, 2006.
[2] Aho A.V., Hopcroft J.E., Ullman J.D., Estructuras de datos y
algoritmos. Addison-Wesley, 1988.
[3] Weiss, Mark Allen, Data Structures and Algorithm Analysis in
Java. Pearson Education, 2007.
[4] Weiss, Mark Allen, Estructuras de datos y algoritmos.
Addison-Wesley Iberoamericana, 1995.
[5] Sahni, Sartaj, Data structures, algorithms, and applications in
Java. McGraw Hill, 2000
[6] The Java Tutorials: Collections
http://docs.oracle.com/javase/tutorial/collections/index.html

You might also like