Está en la página 1de 19

Colas

Carlos Delgado Kloos


Dep. Ingeniera Telemtica
Univ. Carlos III de Madrid
cdk@it.uc3m.es

Java: Colas /

Ejemplo
aLa cola del autobs
aLa cola de la impresora

cdk@it.uc3m.es

Java: Colas /

Caractersticas
aEstructura lineal
aAcceso de insercin por un extremo y
de eliminacin por el otro extremo

cdk@it.uc3m.es

Java: Colas /

Interfaz para colas


p
public
interface Queue {
public int size();
public boolean isEmpty();
public void enqueue(Object o);
public Object dequeue()
throws QueueEmptyException;
public Object front()
throws QueueEmptyException;
}
cdk@it.uc3m.es

Java: Colas /

Un interfaz y
varias implementaciones
Queue

ArrayQueue

LinkedQueue

cdk@it.uc3m.es

Java: Colas /

Implementacin
basada en arrays
top
p

tail
1

2 3

top

tail
8

cdk@it.uc3m.es

N-1

5
2

6 7
N-1

Java: Colas /

Implementacin basada
en listas encadenadas

top

tail

Madrid

Miami

Mnich

cdk@it.uc3m.es

Java: Pilas /

Insercin (enqueue)

top

tail
n

Madrid

cdk@it.uc3m.es

Miami

Mnich

Mosc

Java: Colas /

Implementacin
basada en listas
public void enqueue(Object e) {
Node n=new Node(e, null);
if (isEmpty())
top=n;
else
tail.setNext(n);
tail=n;
tail
n;
size++;
}

cdk@it.uc3m.es

Java: Colas /

Borrado (dequeue)

top

tail

Madrid

cdk@it.uc3m.es

Miami

Mnich

Mosc

Java: Colas /

10

Implementacin
basada en listas
public Object dequeue()
throws QueueEmptyException {
Object temp;
if (isEmpty())
throw new QueueEmptyException("vacia");
temp=top.getElem();
top=top.getNext();
size--;
if (size==0)
tail=null;
return temp;
}
cdk@it.uc3m.es

Java: Colas /

11

Java: Colas /

12

Actividad
aVer animaciones de colas:
a http://courses.cs.vt.edu/
csonline/DataStructures/
Lessons/
QueuesImplementationView/
applet.html
a http://www.cs.usask.ca/
http://www cs usask ca/
resources/tutorials/
csconcepts/1998_2/queues/java/

cdk@it.uc3m.es

Actividad
aProbar el applet DepthBreadth.java
que se encuentra en
http://www.faqs.org/docs/javap/c11/s3.html

cdk@it.uc3m.es

Java: Colas /

13

Java: Colas /

14

Otros tipos de colas


(que ya no son colas)
aColas dobles
aColas con prioridad

cdk@it.uc3m.es

Deques (colas dobles)

first

last

insertFirst

removeLast

removeFirst

insertLast

cdk@it.uc3m.es

Java: Colas /

15

Interfaz para
colas dobles
public interface Deque
p
q
{
public int size();
public boolean isEmpty();
public void insertFirst(Object o);
public void insertLast(Object o);

cdk@it.uc3m.es

Java: Colas /

16

Interfaz para
colas dobles
p
public
Object
j
removeFirst()
throws DequeEmptyException;
public Object removeLast()
throws DequeEmptyException;
public Object first()
th
throws
D
DequeEmptyException;
E t E
ti
public Object last()
throws DequeEmptyException;
}
cdk@it.uc3m.es

Java: Colas /

17

Pilas y colas
como deques
Stack
size()

Deque
size()

Queue

Deque

size()

size()

isEmpty() isEmpty()

isEmpty()

isEmpty()

top()

last()

front()

first()

push(e)

insertLast(e)

enqueue(e)

insertLast(e)

pop()

removeLast()

dequeue()

removeFirst()

cdk@it.uc3m.es

Java: Colas /

18

Definicin de pilas
a partir de deques
public class DequeStack
implements Stack {
private Deque D;
public DequeStack()
{D=new Deque();}
public int size()
{return D.size();}
public boolean isEmpty()
{return D.isEmpty();}
cdk@it.uc3m.es

Java: Colas /

19

Definicin de pilas
a partir de deques
public void p
p
push(Object
j
o){
D.insertLast(o);}
public Object pop()
throws StackEmptyException {
try {return D.removeLast();}
catch (DequeEmptyException ece)
{throw new
StackEmptyException("vacia");}
}
cdk@it.uc3m.es

Java: Colas /

20

10

Definicin de pilas
a partir de deques
public Object
p
j
top()
p()
throws StackEmptyException {
try {return D.last();}
catch (DequeEmptyException ece)
{throw new
StackEmptyException("vacia");}}
}

cdk@it.uc3m.es

Java: Colas /

21

Java: Colas /

22

Listas doblemente enlazadas

Madrid

cdk@it.uc3m.es

Miami

Mnich

11

Nodo
class DLNode {
private Object elem;
private DLNode next, prev;
DLNode() {this(null, null, null);}
DLNode(Object e, DLNode p, DLNode n)
{elem=e; next=n; prev=p;}

cdk@it.uc3m.es

Java: Colas /

23

Nodo
void setElem(Object
( j
e)
) {
{elem=e;}
}
void setNext(DLNode n) {next=n;}
void setPrev(DLNode p) {prev=p;}
Object getElem() {return elem;}
DLNode getNext() {return next;}
DLNode getPrev() {return prev;}
}
cdk@it.uc3m.es

Java: Colas /

24

12

Implementacin
basada en DLNode
public class DLDeque implements Deque {
private DLNode top, tail;
private int size;
public DLDeque() {
top=new DLNode();
top.setElem(null);
top.setPrev(null);
top.setNext(tail);
size=0;}

tail=new DLNode();
tail.setElem(null);
tail.setPrev(top);
tail.setNext(null);

cdk@it.uc3m.es

Java: Colas /

25

Insercin
top

tail
second

Madrid

Miami

Mnich

first
Mosc

cdk@it.uc3m.es

Java: Colas /

26

13

Implementacin
basada en listas
p
public
void insertFirst(Object
( j
e)
) {
DLNode second=top.getNext();
DLNode first=new
DLNode(e,top,second);
second.setPrev(first);
top setNext(first);
top.setNext(first);
size++;
}
cdk@it.uc3m.es

Java: Colas /

27

Borrado
top

first

tail

second

Madrid

Miami

Mnich

Mosc

cdk@it.uc3m.es

Java: Colas /

28

14

Implementacin
basada en listas
public Object removeFirst()
throws DequeEmptyException {
if (isEmpty())
throw new DequeEmptyException("vacia");
DLNode first=top.getNext();
Object temp=first.getElem();
DLNode second=first.getNext();
second first.getNext();
top.setNext(second);
second.setPrev(top);
size--;
return temp;
}
cdk@it.uc3m.es
Java: Colas /

29

Actividad
aVer las colas
colas en
http://java.sun.com/docs/books/tutorial
/collections/interfaces/queue.html
http://java.sun.com/javase/6/docs/api
/java/util/Queue.html

cdk@it.uc3m.es

Java: Colas /

30

15

Colas con prioridad


aUna cola con prioridad es
una estructura de datos lineal que
devuelve los elementos de acuerdo a
un valor asociado a ellos (clave)
(y no al orden en que fueron insertados).
aLa clave
l
de
d comparacin
puede
d coincidir
d
con el valor del elemento, pero tambin
puede diferir de l.
cdk@it.uc3m.es

Java: Colas /

31

Interfaz
public interface PriQueue {
public int size();
public boolean isEmpty();
public void insertItem(Object k,e);
public Object minElem()
throws PriQueueEmptyException;
public Object removeMinElem()
throws PriQueueEmptyException;
Q
p y
p
;
public Object minKey()
throws PriQueueEmptyException;
}

cdk@it.uc3m.es

Java: Colas /

32

16

Ejemplo
3

+++ + +
cdk@it.uc3m.es

Java: Colas /

33

Ejemplo
3

min
min
min
2

+++ + +
cdk@it.uc3m.es

Java: Colas /

34

17

Ejemplo
inserta en orden

21

+++ + +
cdk@it.uc3m.es

Java: Colas /

35

Java: Colas /

36

Implementaciones
aCon una secuencia sin ordenar
Insercin fcil
Comparacin al extraer

aCon una secuencia ordenada


Comparacin al insertar
Extraccin fcil

cdk@it.uc3m.es

18

Actividad
aProbar
http://www.akira.ruc.dk/~keld/algoritmik_e99/
Applets/Chap11/PriorityQ/PriorityQ.html

cdk@it.uc3m.es

Java: Colas /

37

19

También podría gustarte