Mostrando entradas con la etiqueta Cola. Mostrar todas las entradas
Mostrando entradas con la etiqueta Cola. Mostrar todas las entradas

martes, 12 de julio de 2011

Ejercicio "Cola dinámica"

Crear la clase ColaFrasesDin. Se tratará de una cola dinámica, es decir, que no tendrá un tamaño fijo, sino que éste irá variando según se añadan o eliminen objetos de la cola.
Para poder realizar la cola dinámica, emplearemos un objeto Nodo, que contendrá el dato a almacenar en cada lugar de la cola y la referencia al siguiente nodo que le sigue.

public class ColaFrasesDin {
    private Nodo primero = null;
    private Nodo ultimo = null;
    private class Nodo {
        public String dato;
        public Nodo sig;
    }
    public void acolar (String frase){
        Nodo nuevo = new Nodo();
        nuevo.dato = frase;
        nuevo.sig = null;
        if (primero == null)
            primero = nuevo;
        else
            ultimo.sig = nuevo;
        ultimo = nuevo;
    }
    public String desacolar (){
        String aux;
        aux = primero.dato;
        primero = primero.sig;
        return aux;
    }
    public boolean vacia (){
        return primero == null;
    }
}

Ejercicio "Pila" y "Cola"

Crear las clases "PilaFrases" y "ColaFrases", que permitan crear, como su nombre indica, una pila y una cola, respectivamente, de String. Cada clase tendrá los atributos necesarios y las funciones que permitan trabajar con los objetos PilaFrases y ColaFrases, modificándolos o, simplemente, consultando determinados datos.

PilaFrases

public class PilaFrases {
    private String[] frases;
    private int cima;
    PilaFrases(){
        frases = new String[10];
        cima = -1;
    }
    PilaFrases(int numero){
        frases = new String[numero];
        cima = -1;
    }
    public void push (String frase){
        if (cima < frases.length){
            cima++;
            frases[cima] = frase;
        }
    }
    public String pop (){
        cima--;
        return frases[cima+1];
    }
    public boolean empty(){
        /*boolean vacia;
        if (cima == -1)
            vacia = true;
        else
            vacia = false;*/
        return cima == -1;
    }
    public boolean full(){
        /*boolean llena;
        if (cima == (frases.length-1))
            llena = true;
        else
            llena = false;*/
        return cima == (frases.length-1);
    }
}

ColaFrases

public class ColaFrases {
    private String[] tabla;
    private int primero, ultimo;
    ColaFrases(){
        this(10);
    }
    ColaFrases(int tamaño){
        tabla = new String[tamaño+1];
        primero = 0;
        ultimo = -1;
    }
    public boolean llena(){
        return sig(sig(ultimo)) == primero;
    }
    public boolean vacia(){
        return sig(ultimo) == primero;
    }
    private int sig(int actual){
        return (actual+1)%tabla.length;
    }
    public void acolar(String frase){
        if (this.llena())
            throw new IndexOutOfBoundsException("La cola está llena");
        ultimo = sig(ultimo);
        tabla[ultimo] = frase;
    }
    public String desacolar(){
        String aux;
        if (this.vacia())
            throw new IndexOutOfBoundsException("La cola está vacía");
        
        aux = tabla[primero];
        primero = sig(primero);
        return aux;
    }
}