Professional Documents
Culture Documents
Tema 1. Introduccin Tema 2. Anlisis de Algoritmos Tema 3. Tipos de Datos Abstractos Fundamentales Tema 4. Pilas y Colas Tema 5. rboles Tema 6. TDAs ordenados Tema 7. Mapas Tema 8. Grafos
Estructuras de Datos M. Aldea Oct-12
Estructuras de Datos
M. Aldea Oct-12
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
Estructuras de Datos
M. Aldea Oct-12
D C B A
apila(E)
E D C B A
apila(F)
F E D C B A
M. Aldea Oct-12
cima
desapila()
E D C B A
Estructuras de Datos
Uso de pilas
Pila de platos para fregar PlatosParaFregar
<<ImplementacinDePila>>
-platos Plato
*
{ordered, nonunique}
+dejaPlato() +cogePlato()
-operaciones OperacinDeEdicin
*
{ordered, nonunique}
+registraOp() +ltimaOp()
Estructuras de Datos
M. Aldea Oct-12
...
cima=c Elemento ms nuevo Segundo elemento ms nuevo c+1 c c-1
parte libre
...
Segundo elemento ms viejo Elemento ms viejo elementos
Estructuras de Datos M. Aldea Oct-12
parte ocupada 1 0
Tema 4. Pilas y Colas 4.2 Implementacin de Pilas basada en array Implementacin de Pilas basada en 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
Estructuras de Datos M. Aldea Oct-12
Tema 4. Pilas y Colas 4.2 Implementacin de Pilas basada en array Implementacin de Pilas basada en array (cont.)
procedimiento apila(e: Elemento) si tamao() = N entonces error fsi cima := cima + 1 elementos[cima] := e fprocedimiento procedimiento desapila(): Elemento si estVaca() entonces error fsi cima := cima - 1 retorna elementos[cima+1] fprocedimiento
Estructuras de Datos
M. Aldea Oct-12
apila(d)
cima
desapila() retorna d
cima
Estructuras de Datos
a
M. Aldea Oct-12
10
d
final
encola(e)
a
frente
e
final
desencola() retorna a
b
frente
Estructuras de Datos
e
final
M. Aldea Oct-12
11
12
Uso de colas
Cola de la caja de un supermercado -clientes ClientesCaja Cliente
<<ImplementacinDeCola>>
*
{ordered}
TrabajoImpresin
*
{ordered, nonunique}
Estructuras de Datos
M. Aldea Oct-12
13
7 b
8 c
9 d
10 e
11
12
13
14
15
final=10 4 5 6 7 8 9 10 11 12 13 14 i frente=14 14 15 j
Tema 4. Pilas y Colas 4.5 Implementacin de Colas basada en array circular Implementacin de Colas basada en array circular (cont.)
0 b
final
frente
0 b
1 c
6 desencola()b
frente final
Estructuras de Datos M. Aldea Oct-12
15
Estructuras de Datos
M. Aldea Oct-12
16
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
0 e 1 f 2 g 3 a 4 b 5 c 6 d 0 e final 1 f 2 3 a 4 b 5 c 6 d
final
frente
frente
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
Estructuras de Datos M. Aldea Oct-12
17
Estructuras de Datos
M. Aldea Oct-12
18
Tema 4. Pilas y Colas 4.5 Implementacin de Colas basada en array circular Implementacin con contador de elementos (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
Estructuras de Datos M. Aldea Oct-12
19
Tema 4. Pilas y Colas 4.5 Implementacin de Colas basada en array circular Implementacin con contador de elementos (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
Estructuras de Datos M. Aldea Oct-12
20
b
encola(d)
final
frente
b
desencola() a
final frente
Estructuras de Datos
d
M. Aldea Oct-12
21
Estructuras de Datos
22
Tema 4. Pilas y Colas 4.7 Comparacin de las implementaciones Comparacin de las implementaciones (cont.)
Caractersticas generales:
Caracterstica
Requisitos de memoria Fcil crecimiento Aprovechamiento de la memoria
Array
O(N), donde N es el tamao del array de elementos No, requiere redimensionado y copia Desperdicia memoria
Lista Enlazada
O(n), donde n es el nmero de elementos en la pila S, puesto que no est acotada Usa la memoria justa
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
Estructuras de Datos
M. Aldea Oct-12
23
Iterable
<<interface>>
Queue
Pila
LinkedList
Estructuras de Datos
M. Aldea Oct-12
24
Pilas en JCF
JFC no incluye ninguna interfaz especfica para las pilas Utilizaremos LinkedList
PlatosParaFregar
<<LinkedList>>
-platos Plato
*
{ordered, nonunique}
+dejaPlato() +cogePlato()
Estructuras de Datos
M. Aldea Oct-12
25
Tema 4. Pilas y Colas 4.8 Pilas y Colas en Java Collections Framework Pilas en JCF (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(); int size(); // haceVaca // tamao
Estructuras de Datos
M. Aldea Oct-12
26
Colas en JCF
Interfaz Queue, utilizando su implementacin LinkedList
-trabajos TrabajosPendientes
<<LinkedList>>
TrabajoImpresin
*
{ordered, nonunique}
Estructuras de Datos
M. Aldea Oct-12
27
Tema 4. Pilas y Colas 4.8 Pilas y Colas en Java Collections Framework Colas en JCF (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
Estructuras de Datos M. Aldea Oct-12
28
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
Estructuras de Datos
M. Aldea Oct-12
29