Documentos de Académico
Documentos de Profesional
Documentos de Cultura
08 Colas
08 Colas
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 /
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
cdk@it.uc3m.es
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
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
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
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