/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Cola doblemente enlazada

 
      Índice del Foro elrincondelc.com -> Java
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Tram



Registrado: 09 Nov 2006
Mensajes: 7

MensajePublicado: 18/01/2007 1:16 pm
Título: Cola doblemente enlazada

Hola a todos
tengo este codigo de una Cola doblemente enlazada. Hay algun error pero no soy capaz de verlo, a ver si alguien puede ayudarme...
El problema es:
tengo por ejemplo 3 elementos "A", "B" y "C"
borro el ultimo, "C"
inserto uno nuevo,"D"
Pues al insertar despues de borrar el ultimo, nunca aparece

Código:
public class Cola{
  protected Nodo cab; //inicio de la Cola
  protected Nodo actual; //referencia
  protected Nodo fin;
  protected int numElem;


  public Cola() {
    cab = actual = null;
    this.numElem = 0;
  }

  public int getNumElementos() {
    return this.numElem;
  }

  public boolean estaVacia() {
    return cab == null;
  }

  private void insertarEnCabeza(Object o) {
    Nodo nuevo = new Nodo(o);
    nuevo.sig = cab;

    if (cab==null) {
      fin = nuevo;
    }
    cab = nuevo;
    this.numElem++;
  }

  public void insertarAlFinal (Object o) {
    if (this.estaVacia()) {
      this.insertarEnCabeza(o);
      return;
    }

    // Si el actual es el ultimo, insertar detras de actual
    Nodo nuevo = new Nodo (o);
    fin.sig = nuevo;
    fin = nuevo;
    this.numElem++;


  }

  public void inicio() {
    actual = cab;
  }

  public boolean esFin() {
    return actual == null;
  }

  public void avanzar() {
    if (actual != null) {
      actual = actual.sig;
    }
  }

  public Object getActual() {
    if (actual == null) {
      return null;
    }
    else {
      return actual.info;
    }
  }

  public void irAlUltimo() {
    this.actual = this.fin;
  }

  public String toString() {
    String t = "";
    inicio();
    while (!esFin()) {
      t += actual.info + "\n";
      avanzar();
    }
    return t;
  }

  public void recorrer() {
    System.out.println(toString());
  }

  public Object buscar(Object o) {
    inicio();

    while (!esFin() && !o.equals(getActual())) {
      avanzar();
    }

    if (esFin()) {
      return null;
    }
    else {
      return getActual();
    }
  }

  public void borrar(Object o) {
    // Esta vacia, no se puede borrar nada, salir
    if (estaVacia()) {
      return;
    }

    // Hay un elemento, avanzar cabeza y salir
    if (cab.info.equals(o)) {
      cab = cab.sig;
      this.numElem--;
      return;
    }

    // La Cola no esta vacia, y el que hay que borrar es al menos el segundo
    Nodo p = cab;
    Nodo q = null;
    while (p != null && !p.info.equals(o)) {
      q = p;
      p = p.sig;
    }

    if (p != null) {
      Nodo r = p.sig;

      q.sig = r;

      this.numElem--;
    }


  }

  public void borrarActual () {
    // Si esta vacia o no hay actual, salir
    if (this.estaVacia() || this.esFin()) {
      return;
    }

    if (this.actual==this.cab) {
      this.cab = this.cab.sig;
      this.actual = this.cab; // mover iterador (para que no quede apuntando al elemento borrado)
      this.numElem--;
      return;
    }

    Nodo p = cab;
    while (p.sig!=actual) {
      p = p.sig;
    }
    Nodo r = actual.sig;
    p.sig = r;
    this.actual = r;
    this.numElem--;

  }


}
Volver arriba
_Leo_



Registrado: 20 Oct 2005
Mensajes: 285
Ubicación: Buenos Aires, Argentina

MensajePublicado: 23/03/2007 12:04 pm
Título:

No revisé todo el código, pero acá hay un error:

Código:

  private void insertarEnCabeza(Object o) {
    Nodo nuevo = new Nodo(o);
    nuevo.sig = cab;

    if (cab==null) {
      fin = nuevo;
    }
    cab = nuevo;
    this.numElem++;
  }


Si es una cola doblemente enlazada, falta conectar la cabecera al nuevo nodo.
_________________
_Leo_
drk.com.ar

clasdix.com.ar
Volver arriba
      Índice del Foro elrincondelc.com -> Java
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com