public NodoCabezeraX BuscarNodo(int x, int z) { NodoCabezeraX tmp = primero; do { if (tmp.PosX == x) { switch (z) { case 0: if (tmp.Abajo != null) { tmp = tmp.Abajo; return(tmp); } return(null); case 1: return(tmp); case 2: if (tmp.Arriba != null && tmp.Arriba.PosZ == z) { return(tmp.Arriba); } return(null); case 3: if (tmp.Arriba != null && tmp.Arriba.PosZ == z) { return(tmp.Arriba); } else if (tmp.Arriba != null && tmp.Arriba.Arriba != null && tmp.Arriba.Arriba.PosZ == z) { return(tmp.Arriba.Arriba); } return(null); default: return(null); } } tmp = tmp.Derecha; } while (tmp != null); return(null); }
public NodoCabezeraX(int x, int z) { PosX = x; PosZ = z; Izquierda = null; Derecha = null; Arriba = null; Abajo = null; lista = new ListaVertical(); }
public void Insertar(NodoCabezeraX nuevoaux) { NodoCabezeraX nuevo; if (nuevoaux.PosZ == 1) { nuevo = nuevoaux; } else { nuevo = new NodoCabezeraX(nuevoaux.PosX, 1); } NodoCabezeraX tmp = primero; NodoCabezeraX tmp2 = nuevo; if (primero == null) { primero = nuevo; ultimo = nuevo; } else if (nuevo.PosX < primero.PosX) { primero.Derecha = nuevo; nuevo.Izquierda = primero; primero = nuevo; } else if (nuevo.PosX > ultimo.PosX) { ultimo.Derecha = nuevo; nuevo.Izquierda = ultimo; ultimo = nuevo; } else { do { if (tmp.PosX < nuevo.PosX && tmp.Derecha.PosX > nuevo.PosX) { nuevo.Derecha = tmp.Derecha; tmp.Derecha.Izquierda = nuevo; tmp.Derecha = nuevo; nuevo.Izquierda = tmp; tmp2 = nuevo; break; } else if (tmp.PosX == nuevo.PosX) { tmp2 = tmp; break; } tmp = tmp.Derecha; } while (tmp != null); } //insertar en el nivel 0 switch (nuevoaux.PosZ) { case 0: tmp2.Abajo = nuevoaux; break; case 1: break; case 2: tmp2.Arriba = nuevoaux; break; case 3: if (tmp2.Arriba == null) { tmp2.Arriba = nuevoaux; break; } else if (tmp.Arriba.Arriba == null) { tmp2.Arriba.Arriba = nuevoaux; break; } break; default: break; } }
public CabezerasX() { primero = null; ultimo = null; }