Escolar Documentos
Profissional Documentos
Cultura Documentos
Carlos Delgado Kloos Dep. Ingeniera Telemtica Univ. Carlos III de Madrid
cdk@it.uc3m.es Java: Colas / 1
Ejemplo
La cola del autobs La cola de la impresora
cdk@it.uc3m.es
Java: Colas /
Caractersticas
Estructura lineal Acceso de insercin por un extremo y de eliminacin por el otro extremo
cdk@it.uc3m.es
Java: Colas /
ArrayQueue
LinkedQueue
cdk@it.uc3m.es
Java: Colas /
1
0
2 3 4 5
1 2
3 4 5 N-1
tail 8
0
top 5 6 7
N-1
9
1 2 3 4 5
cdk@it.uc3m.es
Java: Colas /
top
tail
Madrid
Miami
Mnich
cdk@it.uc3m.es
Java: Pilas /
cdk@it.uc3m.es
Java: Colas /
Insercin (enqueue)
top
tail
Madrid
Miami
Mnich
Mosc
cdk@it.uc3m.es
Java: Colas /
cdk@it.uc3m.es
Java: Colas /
10
Borrado (dequeue)
top
tail
Madrid
Miami
Mnich
Mosc
cdk@it.uc3m.es
Java: Colas /
11
Actividad
Ver animaciones de colas:
http://courses.cs.vt.edu/ csonline/DataStructures/ Lessons/ QueuesImplementationView/ applet.html http://www.cs.usask.ca/ resources/tutorials/ csconcepts/1998_2/queues/java/
cdk@it.uc3m.es
Java: Colas /
13
Actividad
Probar el applet DepthBreadth.java que se encuentra en
http://www.faqs.org/docs/javap/c11/s3.html
cdk@it.uc3m.es
Java: Colas /
14
cdk@it.uc3m.es
Java: Colas /
15
cdk@it.uc3m.es
Java: Colas /
16
cdk@it.uc3m.es
Java: Colas /
17
Deque
size() last()
Queue
size() isEmpty() front()
Deque
size() isEmpty() first()
isEmpty() isEmpty()
push(e)
pop()
insertLast(e)
removeLast()
enqueue(e)
dequeue()
insertLast(e)
removeFirst()
cdk@it.uc3m.es
Java: Colas /
19
cdk@it.uc3m.es
Java: Queues /
23
tail
null
prev next
null
24
La clase DLNode
Public class DLNode { private Object info; private DLNode next; private DLNode prev; public DLNode(Object info) {} public DLNode(Object info, DLNode prev, DLNode next) {} public public public public public public }
25
DLNode getNext() {} void setNext(DLNode next) {} DLNode getPrev() {} void setPrev(DLNode prev) {} Object getInfo() {} void setInfo(Object info) {}
null
null
26
null node
node.setPrev(prev); if (prev != null) { node.setNext(prev.getNext()); prev.setNext(node); }
null
27
null node if (prev == null) { node.setNext(top); top = node; } if (node.getNext() != null) { node.getNext().setPrev(node); } else { tail = node; }
null
28
Eliminacin de un nodo
removed top data tail
null
null
30
Eliminacin de un nodo
removed top data tail
null
null
Eliminacin de un nodo
removed top data tail
null
null
Eliminacin de un nodo
data top tail
null
null
33
Eliminacin de un nodo
/** * Removes a node from the list and returns * the information it holds. */ public Object remove(DLNode removed) { Object data = removed.getInfo(); if (removed.getPrev() != null) { removed.getPrev().setNext(removed.getNext()); } else { top = removed.getNext(); } if (removed.getNext() != null) { removed.getNext().setPrev(removed.getPrev()); } else { tail = removed.getPrev(); } return data; }
34
Implementacin alternativa
La implementacin anterior se complica debido a la necesidad de comprobar que existen los nodos anterior y posterior Posible simplificacin:
Crear dos nodos especiales, sin datos, de tal forma que uno est siempre al principio y el otro siempre al final:
Una lista vaca slo contiene estos dos nodos. Est garantizado en cualquier operacin de insercin o extraccin que siempre existen el nodo anterior y siguiente. Las referencias top y tail no cambian nunca de valor.
35
Implementacin alternativa
top tail
null null
36
Insercin
top second tail
Madrid
Miami
Mnich
first
Mosc
cdk@it.uc3m.es
Java: Colas /
38
cdk@it.uc3m.es
Java: Colas /
39
Borrado
top first second tail
Madrid Mosc
Miami
Mnich
cdk@it.uc3m.es
Java: Colas /
40
41
Actividad
Ver las 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 /
42
Interfaz
public interface PriorityQueue { public int size(); public boolean isEmpty(); public void insertItem(Comparable priority, Object info); public Object minElem() throws EmptyPriorityQueueException; public Object removeMinElem() throws EmptyPriorityQueueException; public Object minKey() throws EmptyPriorityQueueException; }
cdk@it.uc3m.es
Java: Colas /
44
Ejemplo
3 2 4 1 5
+++ + +
cdk@it.uc3m.es Java: Colas / 45
Ejemplo
3 2 4 1 5
1 min min
+++ + +
cdk@it.uc3m.es Java: Colas / 46
Ejemplo
inserta en orden 3 2 4 1 5
1 2
+++ + +
cdk@it.uc3m.es Java: Colas / 47
Implementaciones
Con una secuencia sin ordenar
Insercin fcil Comparacin al extraer
cdk@it.uc3m.es
Java: Colas /
48
Actividad
Probar
http://www.akira.ruc.dk/~keld/algoritmik_e99/ Applets/Chap11/PriorityQ/PriorityQ.html
cdk@it.uc3m.es
Java: Colas /
49