private void InsertaEnPag(TPagina nodo, int clave, TPagina nuevo, long dir) { int i; for (i = nodo.M - 1; i >= 0 && nodo.GetClave(i) > clave; i--) { nodo.SetClaves(nodo.GetClave(i), i + 1); if (nodo.Tipo == H) { nodo.SetDireccion(nodo.GetDireccion(i), i + 1); } if (nodo.Tipo != H) { nodo.SetDireccion(nodo.GetDireccion(i + 1), i + 2); nodo.SetPtrs(nodo.GetPtrs(i + 1), i + 2); } } // printf("\ni: %d\n", i); nodo.SetClaves(clave, i + 1); if (nodo.Tipo == H) { nodo.SetDireccion(dir, i + 1); } if (nodo.Tipo != H) { nodo.SetDireccion(dir, i + 2); nodo.SetPtrs(nuevo, i + 2); } nodo.M += 1; }
public void InsertaNodoIR(TPagina Nodo) { long r = -1; int c = -1; try { using (FileStream fs = new FileStream( path, FileMode.Open, FileAccess.Write)) { fs.Seek(0, SeekOrigin.End); using (BinaryWriter bw = new BinaryWriter(fs)) { Nodo.DireccionNodo = fs.Position; bw.Write(fs.Position); bw.Write(Nodo.Tipo); for (int i = 0; i < Nodo.Claves.Length; i++) { if (i < Nodo.M) { bw.Write(Nodo.GetDireccion(i)); bw.Write(Nodo.GetClave(i)); } else if (i == Nodo.M && Nodo.GetDireccion(i) > 0) { bw.Write(Nodo.GetDireccion(Nodo.M)); if (i < Nodo.Claves.Length - 1) { bw.Write(c); } } else { bw.Write(r); if (i < Nodo.Claves.Length - 1) { bw.Write(c); } } } } } } catch (FileNotFoundException ioE) { Console.WriteLine(ioE); } }
private void AgregaArbol(TPagina nodo, int i) { if (nodo != null) { if (nodo.Tipo != H) { CargaNodo(nodo, indexA); //MessageBox.Show(i.ToString()); //i += 1; for (int j = 0; j < 5; j++) { if (nodo.GetDireccion(j) > 0) { AgregaArbol(nodo.GetPtrs(j), ++indexA); } else { break; } } } else { CargaNodo(nodo, indexA); // i += 1; } } }
private TPagina InsertaFusion(TPagina nodo1, TPagina nodo2, int clave) { int i, j; TPagina aux; aux = CreaPagina(d, nodo1.Tipo); for (i = 0; i < nodo1.M; i++) { InsertaEnPag(aux, nodo1.GetClave(i), null, nodo1.GetDireccion(i)); if (nodo1.Tipo != H) { aux.SetPtrs(nodo1.GetPtrs(i), i); aux.SetDireccion(nodo1.GetDireccion(i), i); } } if (aux.Tipo != H) { aux.SetPtrs(nodo1.GetPtrs(i), aux.M); // aux.SetDireccion(nodo1.GetDireccion(i), aux.M); InsertaEnPag(aux, clave, null, nodo1.GetDireccion(i)); aux.SetDireccion(nodo1.GetDireccion(i), aux.M - 1); } i = aux.M; for (j = 0; j < nodo2.M; j++) { InsertaEnPag(aux, nodo2.GetClave(j), null, nodo2.GetDireccion(j)); if (nodo2.Tipo != H) { aux.SetPtrs(nodo2.GetPtrs(j), i + j); aux.SetDireccion(nodo2.GetDireccion(j), i + j); } } if (aux.Tipo != H) { aux.SetPtrs(nodo2.GetPtrs(j), aux.M); aux.SetDireccion(nodo2.GetDireccion(j), aux.M); } return(aux); }
private void CargaNodo(TPagina nodo, int k) { // LimpiaTablaArbol(); dataGridView2.Rows.Add(); dataGridView2.Rows[k].Cells[0].Value = nodo.DireccionNodo; dataGridView2.Rows[k].Cells[1].Value = nodo.Tipo; dataGridView2.Rows[k].Cells[2].Value = nodo.GetDireccion(0); dataGridView2.Rows[k].Cells[3].Value = nodo.GetClave(0); dataGridView2.Rows[k].Cells[4].Value = nodo.GetDireccion(1); dataGridView2.Rows[k].Cells[5].Value = nodo.GetClave(1); dataGridView2.Rows[k].Cells[6].Value = nodo.GetDireccion(2); dataGridView2.Rows[k].Cells[7].Value = nodo.GetClave(2); dataGridView2.Rows[k].Cells[8].Value = nodo.GetDireccion(3); dataGridView2.Rows[k].Cells[9].Value = nodo.GetClave(3); dataGridView2.Rows[k].Cells[10].Value = nodo.GetDireccion(4); }
private void PrestaClave(TPagina nodo1, TPagina nodo2, int cb) { if (nodo1.GetClave(nodo1.M - 1) > nodo2.GetClave(nodo2.M - 1)) { //izquierda presta if (nodo1.Tipo != H) { InsertaEnPag(nodo1, cb, nodo2.GetPtrs(nodo2.M), nodo2.GetDireccion(nodo2.M)); clave = nodo2.GetClave(nodo2.M - 1); EliminaClave(nodo2, nodo2.GetClave(nodo2.M - 1)); } else { InsertaEnPag(nodo1, nodo2.GetClave(nodo2.M - 1), null, nodo2.GetDireccion(nodo2.M - 1)); clave = nodo2.GetClave(nodo2.M - 1); EliminaClave(nodo2, nodo2.GetClave(nodo2.M - 1)); } } else { if (nodo1.Tipo != H) { InsertaEnPag(nodo1, cb, nodo2.GetPtrs(0), nodo2.GetDireccion(0)); EliminaClave(nodo2, nodo2.GetClave(0)); clave = nodo2.GetClave(0); } else { // InsertaEnPag(nodo1, cb, null, nodo2.GetDireccion(0)); InsertaEnPag(nodo1, nodo2.GetClave(0), null, nodo2.GetDireccion(0)); EliminaClave(nodo2, nodo2.GetClave(0)); clave = nodo2.GetClave(0); } } }
private void Divide(TPagina nodo) { TPagina aux; int j; //cambiar RH por I aux = CreaPagina(d, nodo.Tipo == R ? I : nodo.Tipo); for (j = nodo.M - 1; j > d; j--, nodo.M--) { if (nodo.Tipo != H) { InsertaEnPag(aux, nodo.GetClave(j), nodo.GetPtrs(j + 1), nodo.GetDireccion(j + 1)); } else { InsertaEnHoja(aux, nodo.GetClave(j), null, nodo.GetDireccion(j)); } } if (nodo.Tipo != H) { aux.SetPtrs(nodo.GetPtrs(j + 1), 0); aux.SetDireccion(nodo.GetDireccion(j + 1), 0); } clave = nodo.GetClave(j); if (nodo.Tipo == H) { aux.SetClaves(clave, 0); aux.SetDireccion(nodo.GetDireccion(j), 0); aux.M++; } //printf("\nj: %d\n", j); pag_n = aux; nodo.M--; }
private void EliminaClave(TPagina nodo, int clave) { int i, index = Buscar(nodo, clave); for (i = Buscar(nodo, clave) - 1; i < nodo.M; i++) { nodo.SetClaves(nodo.GetClave(i + 1), i); nodo.SetDireccion(nodo.GetDireccion(i + 1), i); if (nodo.Tipo != H) { nodo.SetPtrs(nodo.GetPtrs(i + 2), i + 1); } } if (nodo.Tipo != H) { nodo.SetPtrs(pag_n, index - 1 >= 0 ? index - 1 : 0); nodo.SetDireccion(pag_n.DireccionNodo, index - 1 >= 0 ? index - 1 : 0); } nodo.M -= 1; }
private void InsertaEnHoja(TPagina nodo, int clave, TPagina nuevo, long dir) { int i; for (i = nodo.M - 1; i >= 0 && nodo.GetClave(i + 1) > clave; i--) { nodo.SetClaves(nodo.GetClave(i + 1), i + 2); nodo.SetDireccion(nodo.GetDireccion(i + 1), i + 2); if (nodo.Tipo != H) { nodo.SetPtrs(nodo.GetPtrs(i + 2), i + 3); } } nodo.SetClaves(clave, i + 2); nodo.SetDireccion(dir, i + 2); if (nodo.Tipo != H) { nodo.SetPtrs(nuevo, i + 3); } nodo.M += 1; }