package grafica;

/**
 * Título:       Graficas
 * Descripcion:
 * Copyright:    Copyright (c) 2002
 * Empresa:      UMSNH
 * @author Felix Calderon Solorio
 * @version 1.0
 */

public class cola
{
  NodoD inicio, fin;

  public cola ()
  {
    inicio = fin = null;
  }

  void encola(int d, int p)
  {
    NodoD aux = new NodoD(d, p, inicio, null);

    if(inicio == null && fin == null)
    {
      inicio = aux;
      fin = aux;
    }
    else
    {
      inicio.izq = aux;
      inicio = aux;
    }
  }

  int desencola()
  {
     int aux;
     aux = fin.Contenido();

     if(fin.Izquierdo()!=null)
     {
       fin = fin.Izquierdo();
       fin.der = null;
      }
      else fin = inicio = null;
      return (aux);
  }

  NodoD Busca(int c)
  {
    NodoD aux;

    for(aux = inicio; aux != null;  aux=aux.der)
      if(aux.dato == c) break;

    return aux;
  }

  void ordena()
  {
    NodoD aux;
    int temp,  band=1;

    while(band == 1)
    {
      band = 0;
      for(aux = inicio; aux.der != null;  aux=aux.der)
        if(aux.prioridad < aux.der.prioridad)
        {
          temp         = aux.dato;
          aux.dato     = aux.der.dato;
          aux.der.dato = temp;

          temp              = aux.prioridad;
          aux.prioridad     = aux.der.prioridad;
          aux.der.prioridad = temp;

          band = 1;
        }
      }
  }

  void encola_prioridad(int d, int p)
  {
    NodoD aux;
    aux = Busca(d);

    if(aux == null) encola(d, p);
    else
      if(p < aux.prioridad) aux.prioridad = p;

    ordena();
  }

  String imprime()
  {
    NodoD aux;
    String salida = "[";

    aux = inicio;
    if (aux == null) return ("[...]");
    while(aux!=null)
    {
      salida += (aux.dato+1) + "(" + aux.prioridad + ") ";
      if(aux.der != null) salida += ", ";
      aux = aux.der;
    }
    salida += "]";
    return salida;
  }

}