| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Tram
Registrado: 09 Nov 2006 Mensajes: 7
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |