Вы находитесь на странице: 1из 4

Cola dinamica

// Cola.java

// Interfaz general de Colas:


interface InterfazCola{
// El constructor devuelve una Cola vacía
public boolean EsVacia();
// Devuelve true si es vacía
public void Inserta(Elemento x);
// Incluye x en la Cola de "this"
public Elemento Cabeza() throws IllegalArgumentException;
// Devuelve el objeto en cabeza de la Cola "this"
public void Resto() throws IllegalArgumentException;
// Obtiene la cola de la Cola actual (extrae el elemento en cabeza)
public Object clone();
// Saca un duplicado de la Cola "this". Devuelve un objeto
// del tipo Cola concreto que se este empleando.
public String toString();
// Pasa la Cola a String.
}

class Cola implements InterfazCola {

// Clase Nodo para la implementación de Colas dinámicas


class Nodo {
Elemento Info; // Información almacenada en el nodo
Nodo Siguiente; // Nodo siguiente
public Nodo(Elemento e, Nodo n){
Info=e;
Siguiente=n;
}
}

private Nodo NodoCabeza; // Nodo en cabeza de la Cola


private Nodo NodoFinal; // Nodo en Cola

public Cola(){
// Devuelve una Cola vacía
NodoCabeza=null;
NodoFinal=null;
}
public boolean EsVacia(){
return (NodoCabeza == null);
}
public void Inserta(Elemento x) {
Nodo Nuevo;
Nuevo=new Nodo(x, null);
if (NodoCabeza==null) NodoCabeza=Nuevo;
else NodoFinal.Siguiente=Nuevo;
NodoFinal=Nuevo;
}
public Elemento Cabeza()throws IllegalArgumentException {
if (NodoCabeza == null) throw new IllegalArgumentException();
else return NodoCabeza.Info;
}
public void Resto() throws IllegalArgumentException{
if (NodoCabeza == null) throw new IllegalArgumentException();
else NodoCabeza=NodoCabeza.Siguiente;
}
public Object clone(){
Cola c1;
Nodo actual, aux, previo;

aux=null;
c1=new Cola();
if (NodoCabeza != null)
{
actual=NodoCabeza;
previo=null;
while (actual != null){
aux=new Nodo(actual.Info, null);
if (previo != null) previo.Siguiente=aux;
else c1.NodoCabeza=aux;
previo=aux;
actual=actual.Siguiente;
}
c1.NodoFinal=aux;
}
return (Object)c1;
}
public String toString(){
String s;
Nodo actual;
s=new String(" ");
actual=NodoCabeza;
while (actual != null){
s=s.concat(actual.Info.toString());
actual=actual.Siguiente;
// if (actual != null) s=s.concat(" ");
}
s=s.concat(" ");
return s;
}
}

Ejecucion del Programa