Você está na página 1de 10

Estructuras de Datos

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

Tema 4. Pilas y Colas

Tema 4. Pilas y Colas


4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4.9. TDA Pila Implementacin de Pilas basada en array Implementacin de Pilas basada en lista enlazada TDA Cola Implementacin de Colas basada en array circular Implementacin de Colas basada en lista enlazada Comparacin de las implementaciones Pilas y Colas en Java Collections Framework Bibliografa

Estructuras de Datos

M. Aldea Oct-12

Tema 4. Pilas y Colas

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

Tema 4. Pilas y Colas 4.1 TDA Pila

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)

cima cima cima

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

Tema 4. Pilas y Colas 4.1 TDA Pila

Operaciones de las pilas


apila(e: Elemento) // aade el elemento en la cima de la pila desapila(): Elemento // elimina y retorna el elemento que ocupaba la // la cima. La cima pasa al siguiente elemento cima(): Elemento // retorna (pero no elimina) el elemento que // ocupa la cima. La cima no cambia. haceVaca() // vaca la pila (pasa a tener tamao 0) tamao(): Entero // retorna el tamao de la pila (num. elementos) estVaca(): Booleano // indica si la pila est vaca
Estructuras de Datos M. Aldea Oct-12

Tema 4. Pilas y Colas 4.1 TDA Pila

Uso de pilas
Pila de platos para fregar PlatosParaFregar
<<ImplementacinDePila>>

-platos Plato
*
{ordered, nonunique}

+dejaPlato() +cogePlato()

Pila de operaciones de edicin para implementar el deshacer de un editor de texto OperacionesDeEdicin


<<ImplementacinDePila>>

-operaciones OperacinDeEdicin
*
{ordered, nonunique}

+registraOp() +ltimaOp()

Estructuras de Datos

M. Aldea Oct-12

Tema 4. Pilas y Colas 4.2 Implementacin de Pilas basada en array

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
N-1

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

Tema 4. Pilas y Colas 4.3 Implementacin de Pilas basada en lista enlazada

4.3 Implementacin de Pilas basada en lista enlazada


Implementacin directa y eficiente utilizando una lista simplemente enlazada inserciones y extracciones por la cabeza de la lista
cima

apila(d)

cima

desapila() retorna d

cima
Estructuras de Datos

a
M. Aldea Oct-12

10

Tema 4. Pilas y Colas 4.4 TDA Cola

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
frente

d
final

encola(e)

a
frente

e
final

desencola() retorna a

b
frente
Estructuras de Datos

e
final
M. Aldea Oct-12

11

Tema 4. Pilas y Colas 4.4 TDA Cola

Operaciones de las colas


encola(e: Elemento) // aade el elemento al final de la cola desencola(): Elemento // elimina y retorna el elemento que ocupaba el // frente. El siguiente elemento pasa al frente frente(): Elemento // retorna (pero no elimina) el elemento que // ocupa el frente. El frente no cambia. haceVaca() // vaca la cola (pasa a tener tamao 0) tamao(): Entero // retorna el tamao de la cola (num. elementos) estVaca(): Booleano // indica si la cola est vaca
Estructuras de Datos M. Aldea Oct-12

12

Tema 4. Pilas y Colas 4.4 TDA Cola

Uso de colas
Cola de la caja de un supermercado -clientes ClientesCaja Cliente
<<ImplementacinDeCola>>

*
{ordered}

Cola de trabajos pendientes en una impresora -trabajos TrabajosPendientes


<<ImplementacinDeCola>>

TrabajoImpresin
*
{ordered, nonunique}

Estructuras de Datos

M. Aldea Oct-12

13

Tema 4. Pilas y Colas 4.5 Implementacin de Colas basada en array circular

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 6 a frente=6 0 k 1 l 2 m 3 n final=3
Estructuras de Datos M. Aldea Oct-12

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

6 a encola(c) 0 b desencola()a 1 c final frente 2 3 4 5 6 a

final

frente

0 b

1 c

6 desencola()b

final 0 frente desencola()c 0 1 2 3 4 5 6 1 c final frente 2 3 4 5 6

frente final
Estructuras de Datos M. Aldea Oct-12

15

Tema 4. Pilas y Colas 4.5 Implementacin de Colas basada en array circular

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

Estructuras de Datos

M. Aldea Oct-12

16

Tema 4. Pilas y Colas 4.5 Implementacin de Colas basada en array circular

Deteccin de cola vaca/llena con los cursores


Vaca cuando frente est en la posicin siguiente a final 0 1 2 3 4 5 (final + 1) mod N = frente
frente final 6

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

Tema 4. Pilas y Colas 4.5 Implementacin de Colas basada en array circular

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

frente tamao=0 final

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

Tema 4. Pilas y Colas 4.6 Implementacin de Colas basada en lista enlazada

4.6 Implementacin de Colas basada en lista enlazada


Implementacin directa y eficiente utilizando una lista simplemente enlazada inserciones por el final y extracciones por el principio de la lista
final frente

b
encola(d)

final

frente

b
desencola() a

final frente
Estructuras de Datos

d
M. Aldea Oct-12

21

Tema 4. Pilas y Colas 4.7 Comparacin de las implementaciones

4.7 Comparacin de las implementaciones


Eficiencia temporal de las operaciones:
Operacin pila/cola
apila/encola desapila/desencola cima/frente tamao haceVaca estVaca

Array y Lista enlazada


O(1) O(1) O(1) O(1) O(1) O(1)

Es algo ms rpida la implementacin basada en array


M. Aldea Oct-12

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

Tema 4. Pilas y Colas 4.8 Pilas y Colas en Java Collections Framework

4.8 Pilas y Colas en Java Collections Framework


<<interface>>

Iterable
<<interface>>

Collection Cola JCF NO incluye la interfaz Stack (Pila)


<<interface>>

Queue

Pila

LinkedList

Estructuras de Datos

M. Aldea Oct-12

24

Tema 4. Pilas y Colas 4.8 Pilas y Colas en Java Collections Framework

Pilas en JCF
JFC no incluye ninguna interfaz especfica para las pilas Utilizaremos LinkedList
PlatosParaFregar
<<LinkedList>>

-platos Plato
*
{ordered, nonunique}

+dejaPlato() +cogePlato()

public class PlatosParaFregar { private LinkedList<Plato> platos = new LinkedList<Plato>(); ...

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

boolean isEmpty(); // estVaca

Estructuras de Datos

M. Aldea Oct-12

26

Tema 4. Pilas y Colas 4.8 Pilas y Colas en Java Collections Framework

Colas en JCF
Interfaz Queue, utilizando su implementacin LinkedList
-trabajos TrabajosPendientes
<<LinkedList>>

TrabajoImpresin
*
{ordered, nonunique}

public class TrabajosPendientes { private Queue<TrabajoImpresin> trabajos = new LinkedList<TabajoImpresin>(); ...

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

Tema 4. Pilas y Colas 4.9 Bibliografa

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

Você também pode gostar