Trabajo Algoritmia

download Trabajo Algoritmia

of 23

Transcript of Trabajo Algoritmia

test.cpp#include"btreeType.h"#include"btreeplus.h"#include"datos.h"#include#include#include#include#include #includeusing namespace std;using std::ifstream;using std::ofstream;BTree A(3);BTree B(3);BTree C(3);int c=0,ct=0;void rellenar(string q){string name;char nfile[10];int cod=0,ss=0, temp=0,cont=0;std::fstream fs;fs.open (q+".txt");while (fs.good()){char w = fs.get(); if (fs.good()){std::coutcont - 1){p->info [i] = p->info [i+1];i++;}p->cont--;}template void BTREEPLUS::cambio (pagina *p,pagina *q,pagina *r,int i,E x){int k,t;if (x > r->info [r->cont - 1]) {t = q->info [i];this->retirar (q,i);k = 0;this->insertar (p,t,&k);t = r->info [r->cont - 1];this->retirar (r, r->cont - 1);k = i;if (k == -1)k = 0;this->insertar (q,t,&k);}else {t = q->info [i];this->retirar (q, i);k = p->cont - 1;if (k == -1)k = 0;this->insertar (p,t,&k);t = r->info [0];this->retirar (r, 0);k = i;if (q->cont != 0)if (k > q->cont - 1)k = q->cont -1;this->insertar (q,t,&k);}}template int BTREEPLUS::hoja(pagina *p){int j = 0;while (p->apunt [j] == NULL && j < p->cont - 1)j++;return (p->apunt [j] == NULL);}template void BTREEPLUS::cizquierda_apunt(pagina *p,int i,int j){while (i < j){p->apunt [i] = p->apunt [i+1];i++;}p->apunt [i] = NULL;}template void BTREEPLUS::esta(pagina *p, E x, int *posicion, LIFO1 *pila){int i = 0,encontro = 0;*posicion = -1;while (p != NULL && !encontro) {i = 0;while (x > p->info [i] && i < p->cont - 1)i++;if (x < p->info [i]) {this->ins1_pila (pila, p, i);p = p->apunt [i];}else if (x > p->info [i]) {this->ins1_pila (pila, p, i+1);if (p->apunt [0] != NULL)p = p->apunt [i+1];else p = NULL;}else {if (p->apunt [0] != NULL) {this->ins1_pila (pila, p, i+1);p = p->apunt [i+1];}else {this->ins1_pila (pila, p, i);encontro = 1;}}}if (encontro == 1)*posicion = i;}template void BTREEPLUS::unir (pagina **raiz, pagina *q, pagina *r, pagina *p, int i, LIFO1 pila, E x, int posicion){int terminar = 0,j, k;pagina *t;this->retirar (p, posicion);if (x < r->info [0]) {t = p;p = r;r = t;}while (terminar == 0) { if (r->cont < N && p->cont > N) {this->cambio (r, q, p, i, x);r->apunt [r->cont] = p->apunt [0];this->cizquierda_apunt (p, 0, p->cont + 1);terminar = 1; } else if (p->cont < N && r->cont > N) {this->cambio (p, q, r, i, x);this->cderecha_apunt (p, 0);p->apunt [0] = r->apunt [r->cont + 1];r->apunt [r->cont + 1] = NULL;terminar = 1; } else { j = r->cont; if (r->apunt [0] == NULL) // Si es ultimo nivel r->apunt [M] = p->apunt [M]; else r->info [j++] = q->info [i]; k = 0; while (k cont - 1)r->info [j++] = p->info [k++]; r->cont = j; this->retirar (q, i); k = 0; j = M - p->cont; while (p->apunt [k] != NULL)r->apunt [j++] = p->apunt [k++]; free (p); if (q->cont == 0) {q->apunt [i+1] = NULL;if (this->pila1_vacia (&pila) ) {free (q);q = NULL;} } else this->cizquierda_apunt (q, i+1, q->cont+1); if (q != NULL)if (q->cont >= N)terminar = 1;else {t = q;if (!this->pila1_vacia (&pila) ) {this->retira1_pila (&pila, &q, &i);if (x >= q->info [0]) {p = t;r = q->apunt [i-1];i--;}else {r = t;p = q->apunt [i+1];}}elseterminar = 1;} else {terminar = 1;*raiz = r; } }}}template int BTREEPLUS::retira_b(pagina **raiz, pagina **VSAM, E x, int *s){int posicion, i, k, temp;pagina *p, *q, *r;LIFO1 pila;*s = 1;this->init1_pila (&pila);this->esta (*raiz, x, &posicion, &pila);if (posicion == -1) {*s = 0; // La llave no existe en el arbol return (0);}this->retira1_pila (&pila, &p, &i);if (p->cont > N) {this->retirar (p, posicion);return (1);}if (this->pila1_vacia (&pila)) {this->retirar (p, posicion);if (p->cont == 0) {free (*raiz);*raiz = *VSAM = NULL;}return (1);}this->retira1_pila (&pila, &q, &i);if (i < q->cont) {r = q->apunt [i+1];if (r->cont > N) {this->retirar (p, posicion);temp = r->info[0];this->retirar(r,0);this->retirar (q,i);k = this->donde (p, temp);this->insertar (p, temp, &k);k = this->donde (q, r->info [0]);this->insertar (q, r->info [0], &k);return (1);}}if (i > 0) {r = q->apunt [i-1];if (r->cont > N) {this->retirar (p, posicion);temp = r->info [r->cont - 1];this->retirar(r,r->cont - 1);this->retirar (q,i-1);k = this->donde (p, temp);this->insertar (p, temp, &k);k = this->donde (q, temp);this->insertar (q, temp, &k);return (1);}}if (i > 0)i--;this->unir (raiz,q,r,p,i,pila,x,posicion);return (1);}#endif datos.h#include#includeusing namespace std;using std::ifstream;using std::ofstream;class nb{private:int codigo;string nombre;int codDep;public:nb(int, string, int);nb(int, string, int,int);nb(){}bool operator