lunes, 30 de marzo de 2009

COLAS

Cola (Principio fijo) FIFO
FIFO

First → in → Primero en entrar.
First → out → Primero en salir.



Operaciones con la cola:

1)Enqueve: Añade un elemento final de la cola.
2)Dequeve: elimina el primer elemento de la cola.
3)IsEmpty: La cola esta vacía.
4)IsFull: La cola esta llena.




Consideraciones:


1.La operación de insertar no tiene restricciones.
2.No se puede remover elementos de una lista vacía (Underflow)
3.Se necesita una arreglo y dos variables numéricas (Font – primer elemento se incializa en 0 y Rear Posición del ultimo elemento de la fila -1.


Fila Circular


1.El elemento anterior al primero es el último (en inglés es una dequeue)
2.Implementación con arreglos.



Fila Doble

Los elementos pueden insertarse o eliminarse por cualquiera de los dos extremos.

Variantes:

•Doble fila con entrada restringida
•Doble fila con Salida restringida

Operaciones:

•Insertar elementos Insertar elementos
•Eliminar elementos Eliminar elementos
•Ver si la fila esta vacía
•Ver si la fila esta llena
•Imprimir los elementos Imprimir los elementos
•Obtener el largo de la fila Obtener el largo de la fila


JAVA:
import java.io.*;
//Declaramos la clase calculatorTest
public class ejecutar_cola{
//Declaramos el metodo principal
public static void main (String args[])throws IOException {
int Espacios = 0;
char Resp,
op; String aux;
//---
Imprimir Menu ----
\\ System.out.println("\n :: XROM RELOADED :: 19/07/07 \n");
System.out.print("\t Cuantos espacios quiere en la Cola (entre 3 y 30 recomendable)? :"); Espacios = Integer.parseInt(entrada.readLine());
Cola Ejecutar = new Cola(Espacios);
//--- Imprimir Menu ----
\\ System.out.println("\n\n\t ------------
//-------- Menu Cola Simple --------\\\\------------ \n ");
do { System.out.println("\n\n1.- Imprimir Cola");
// Mostrar System.out.println("2.- Agregar Elemento a la Cola");
// Push System.out.println("3.- Quitar Elemento de la Cola");
// Pop System.out.print("\n\n Elija una Opcion : ");
aux = entrada.readLine(); op = aux.charAt(0);
//---- Elegir opcion ---
\\ switch (op) { case '1': Ejecutar.Imprimir();
break; case '2':
Ejecutar.Push();
break;
case '3': Ejecutar.Pop();
break;
default:
System.out.println("opcion fuera de rango !!"); }
// Fin del switch System.out.print("Desea hacer otra operacion ?? S / N ");
aux = entrada.readLine(); Resp = aux.charAt(0); } while (Resp == 'S' Resp == 's'); }
// Fin del metodo main }
// Fin de la calse Cola.java(Clase y Metodos de la Cola)
----------------------------------------------------------
Ejemplo: cola de espera
import java.util.*;
public class ColaEspera {
/** Clase interna para almacenar todos los datos de un cliente*/
private static class DatosCliente { Cliente c; long entrada, salida;
// milisegundos
/** Constructor; pone la hora de entrada*/ DatosCliente (Cliente c) {
this.c=c; entrada=Reloj.ahora(); }
void atiende() { salida=Reloj.ahora(); } }
// colas del servicio private Queue colaEspera;
private Queue colaAtendidos;
/**Constructor de ColaEspera *
/ public ColaEspera() {
colaEspera=new LinkedList();
colaAtendidos=new LinkedList(); }
** * Nuevo cliente; se mete en la cola de espera */
public void nuevoCliente(Cliente c)
{ DatosCliente datos=new DatosCliente(c);
colaEspera.add(datos);
} /** * Atender cliente: se saca de la cola de * espera y se mete en la de atendidos;
* retorna el cliente atendido */
public Cliente atenderCliente() throws NoSuchElementException {
DatosCliente datos=colaEspera.remove();
datos.atiende();
colaAtendidos.add(datos);
return datos.c; }
public double tiempoEsperaNoAtendidos() {
long tiempo=0;
int num=0;
long ahora=Reloj.ahora();
for (DatosCliente datos: colaEspera) { tiempo=tiempo + ahora-datos.entrada; num++; }
if (num==0) { return 0.0; }
else { return (((double) tiempo)/num)/1000.0; } }
public double tiempoEsperaNoAtendidos() {
long tiempo=0;
int num=0; long ahora=Reloj.ahora();
for (DatosCliente datos: colaEspera) { tiempo=tiempo + ahora-datos.entrada; num++; }
if (num==0) { return 0.0; }
else { return (((double) tiempo)/num)/1000.0; } }
Ejemplo con cola de prioridad /** *
Clase enumerada que representa la * urgencia de un cliente */
public enum Urgencia { baja, media, alta }
import java.util.*;
/public class ColaEsperaConUrgencia {
/** * Clase interna para almacenar los datos * de un cliente con urgencia */
private static class DatosCliente implements Comparable {
Cliente c; Urgencia urg; /** *
Constructor de DatosCliente */
DatosCliente (Cliente c, Urgencia urg) { this.c=c; this.urg=urg; }
/* * Comparación de clientes por su urgencia */
public int compareTo(DatosCliente otro) { return this.urg.compareTo(otro.urg); } //
cola del servicio private Queue colaEspera;
/** * Constructor de ColaEspera */ public ColaEsperaConUrgencia() { colaEspera=new PriorityQueue(); } /** * Nuevo clie
nte; se mete en la cola de espera *
/ public void nuevoCliente (Cliente c, Urgencia urg) { DatosCliente datos=new DatosCliente(c,urg); colaEspera.add(datos); }
/** * Atender cliente: se saca de la cola de * espera; retorna el cliente atendido */
public Cliente atenderCliente() throws NoSuchElementException { DatosCliente datos=colaEspera.remove(); return datos.c; }
/** *
Mostrar el estado de la cola de espera */
public void muestraEstado()
{ System.out.println();
System.out.println("--Estado de la cola--");
System.out.println("No atendidos "+ colaEspera.size());
if (colaEspera.size()>0) { for (DatosCliente datos:colaEspera) { System.out.println(datos.c+" urgencia: "+datos.urg); }
} }
/** * Num clientes en espera */ public int numClientesEnEspera() { return colaEspera.size();
} }

0 comentarios:

Publicar un comentario