Professional Documents
Culture Documents
Implementacin Esttica.
QUEUE - INTRODUCCIN
Una Queue (cola) es otra clase especial de lista, donde
los elementos son insertados en un extremo (el final de la
cola) y borrados en el otro extremo (el frente de la cola).
stack cola
QUEUE - OPERACIONES
Las operaciones fundamentales de una cola son:
Pre: L a cola no est llena.
enqueue
Insertar un elemento al final de la cola
enqueue
TAD QUEUE - DEFINICIN dequeue
enqueue
TAD QUEUE - DEFINICIN dequeue
}
QUEUE - IMPLEMENTACIN
Veremos dos implementaciones:
5 9 3 1 8
Lista enlazada
5 9 3 1 8
Array
5 9 3 1 8
QUEUE - IMPLEMENTACIN
Una implementacin adecuada para este tipo abstracto es
usar listas encadenadas.
fro bac
nt k
A B C
QUEUE ESTRUCTURA
class Queue {
NodoQ front;
NodoQ back;
}
class NodoQ {
Object elem;
NodoQ next;
}
TAD QUEUE IMPLEMENTACIN DINMICA
OPCIN 1: LISTA
ENQUEUE
Insertar al final de la lista
DEQUEUE
Eliminar el primer elemento de la lista
FRONT
Retornar el primer elemento de la lista
dequeue enqueue
TAD QUEUE IMPLEMENTACIN DINMICA
QUEUE DE NMEROS ENTEROS
public class NodoQ {
}
TAD QUEUE IMPLEMENTACIN DINMICA
QUEUE DE NMEROS ENTEROS
public class Queue implements IQueue {
public Queue ( ){
this.front = this.back = null;
}
front
dequeue enqueue
TAD QUEUE IMPLEMENTACIN DINMICA
QUEUE DE NMEROS ENTEROS
public Object front() {
return this.front.element();
}
Constructor
front = 0, back = -1
ENQUEUE
Incremento back e inserto en el theArray[back]
DEQUEUE
Incremento front front
FRONT enqueue
Retornar el valor theArray[front] dequeue
front
IMPLEMENTACIN: ARRAY
F B
4 5 2 7 CANTIDAD ELEMENTOS: 4
DEQUEUE F B
4 5 2 7 CANTIDAD ELEMENTOS:3
DEQUEUE F B
ENQUEUE (9) F B
4 5 2 7 9 CANTIDAD ELEMENTOS: 3
La cola tiene
capacidad
ENQUEUE (13) pero back
? llego al final
del array
front
IMPLEMENTACIN: ARRAY
Problema:
La cola no esta llena.
Back se encuentra en el ltimo lugar del array.
Solucin:
Implementar el array como un array circular.
front
front
IMPLEMENTACIN: ARRAY
ENQUEUE (x)
back++
if (back==dimension){back = 0}
theArray[back ]=x
DEQUEUE
front++
if (front==dimension){front = 0}
FRONT
Retornar el valor theArray[front]
front
IMPLEMENTACIN: ARRAY
F B
7 2 CANTIDAD ELEMENTOS: 2
ENQUEUE(1) B F
1 7 2 CANTIDAD ELEMENTOS: 3
ENQUEUE(3) B F
DEQUEUE B F
1 3 2 CANTIDAD ELEMENTOS: 3
F B
DEQUEUE
1 3 CANTIDAD ELEMENTOS: 2
front
IMPLEMENTACIN: ARRAY
F B
1 3 CANTIDAD ELEMENTOS: 2
DEQUEUE
FB
3 CANTIDAD ELEMENTOS: 1
DEQUEUE B F
CANTIDAD ELEMENTOS: 0
Cmo
diferencio la
situacin de B F
que esta llena
o vaca la cola 1 3 5 7 2 CANTIDAD ELEMENTOS: 5
QUEUE
IMPLEMENTACIN: ARRAY
Problema:
Difcil reconocer cuando la cola esta llena o vaca
Solucin:
Agregar un atributo: CurrentSize
IMPLEMENTACIN: ARRAY
public class QueueArray implements IQueue {
/**
* Pos.: Constructor. Crea la cola vaca.
*/
public QueueArray (){
this.theArray = new int[DIMENSION];
this.front = 0;
this.back = -1;
this.currentSize = 0;
}
front
IMPLEMENTACIN: ARRAY
public void dequeue() {
this.currentSize--;
this.front++;
if(this.front==DIMENSION){
this.front = 0;
}
}
IMPLEMENTACIN: ARRAY
public int front() {
return this.theArray[this.front];
}
}
QUEUE IMPLEMENTACIN ESTTICA
RESUMEN
As como usamos un array con tope para la
implementacin esttica del stack, tambin lo podemos
usar para implementar la cola en su versin acotada (en
cantidad de elementos).
Analicemos su eficiencia