Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Código
/* En este programa se encuentran las rutinas que };
insertan y */
struct componente {
/* retiran llaves de un arbol b+ de cualquier orden.
*/ pagina *s;
int v;
#include "stdio.h" };
//#include "alloc.h"
#define M 4 };
#define M1 5
#define MAXIMO 10
{
using namespace std; pagina *raiz,*VSAM;
int x,min,s;
typedef struct z pagina; void ins_b (pagina **raiz,pagina **VSAM,int
typedef struct LIFO LIFO; x,int *s);
}; printf ("Comienzo..\n");
if (s == 1)
printf ("La llave ya existe en el arbol void init_pila (struct LIFO *p)
B+\n");
{
/*printf ("\n");
p->t = 0;
listar_b (raiz,0);
}
printf ("\n");
listar_VSAM (VSAM);*/
int pila_vacia (struct LIFO *p)
printf ("De llave\n");
{
min = lea();
return (!p->t);
}
}
listar_VSAM (VSAM);
getch();
printf ("\nRetiros\n");
void ins_pila (struct LIFO *p,pagina *s)
printf ("De llave a retirar\n");
{
x = lea();
if (p->t == MAXIMO) {
while (x != 9999) {
printf ("la pila no soporta mas elementos\n");
retira_b (&raiz, &VSAM, x, &s);
exit (1);
if (s == 0)
}
printf ("La llave no existe en el arbol
B+\n"); else {
listar_VSAM (VSAM); }
x = lea();
printf ("\n"); {
}
else { {
} exit (1);
} }
else {
{ p->t--;
p->t = 0; }
} }
} {
int i;
{ i=0;
} }
else {
p->a[p->t - 1].s = s; {
} inicializar (*p);
} (*p)->cont = 1;
(*p)->info [0] = x;
j--;
*posicion = -1;
}
while (p && !encontro) {
}
ins_pila (pila, p);
p->cont++;
i = 0;
p->info [*i] = x;
while (x > p->info [i] && i < p->cont - 1)
}
i++;
p = p->apunt [i+1];
i= 0;
else p = NULL;
while (x > p->info [i] && i < p->cont - 1)
else if (p->apunt [0] != NULL)
i++;
p = p->apunt [i+1];
return (i);
else encontro = 1;
}
}
if (!encontro)
void romper (pagina *p,pagina *t,pagina **q,
*posicion = i;
int x,int *subir,int separar)
}
{
int j;
if (separar == 0) {
b[++i] = t; }
inicializar (*q); {
i = 0; int j;
if (separar == 0) {
p->cont = N; j = p->cont;
i++; {
} int i;
} init1_pila (&pila);
while (p) { listar1_b (p->apunt [i], l+1);
ins1_pila (&pila,p,0); }
p = p->apunt [0]; }
retira1_pila (&pila,&p,&i); {
p = p->apunt [0]; }
} printf ("\n");
} }
{
void listar1_b (pagina *p,int l)
int posicion,i,subir,subir1,terminar,separar;
{
pagina *p,*nuevo,*nuevo1;
int i;
LIFO pila;
if (p) {
init_pila (&pila);
for (i = 0; i < l; i++)
*s = 0;
printf (" ");
if (*raiz == NULL) {
for (i = 0; i < p->cont; i++)
crear_pagina (raiz, x);
printf ("%4d",p->info [i]);
*VSAM = *raiz;
printf ("\n");
}
listar1_b (p->apunt [0],l+1);
else {
for (i=1; i <= p->cont; i++)
buscar (*raiz, x, &posicion, &pila); if (separar == 1 && terminar == 0) {
terminar = separar = 0; }
if (separar == 0) {
int lea()
romper (p, NULL, &nuevo, x,
&subir,separar); {
&subir1,separar); }
subir = subir1;
} {
if (separar == 1) { i++;
separar = 0; }
}
if (x > r->info [r->cont - 1]) {
}
t = q->info [i]; while (p->apunt [j] == NULL && j < p->cont -
1)
retirar (q,i);
j++;
k = 0;
return (p->apunt [j] == NULL);
insertar (p,t,&k);
}
t = r->info [r->cont - 1];
k = p->cont - 1;
void esta (pagina *p, int x, int *posicion, LIFO1
if (k == -1) *pila)
k = 0; {
insertar (p,t,&k); int i = 0,encontro = 0;
t = r->info [0];
}
int hoja (pagina *p) else if (x > p->info [i]) {
{ ins1_pila (pila, p, i+1);
int j = 0; if (p->apunt [0] != NULL)
p = p->apunt [i+1];
else p = NULL; cambio (r, q, p, i, x);
} terminar = 1;
} }
} else {
if (encontro == 1) j = r->cont;
k = 0;
p = r; free (p);
r = t; if (q->cont == 0) {
terminar = 1;
*s = 1;
else {
init1_pila (&pila);
t = q;
esta (*raiz, x, &posicion, &pila);
if (!pila1_vacia (&pila) ) {
if (posicion == -1) {
retira1_pila (&pila, &q, &i);
*s = 0; /* La llave no existe en el arbol */
if (x >= q->info [0]) {
return (0);
p = t;
}
r = q->apunt [i-1];
retira1_pila (&pila, &p, &i);
i--;
if (p->cont > N) {
}
retirar (p, posicion);
else {
return (1);
r = t;
}
p = q->apunt [i+1];
if (pila1_vacia (&pila)) {
}
retirar (p, posicion);
}
if (p->cont == 0) {
else terminar = 1;
free (*raiz);
}
*raiz = *VSAM = NULL;
else {
}
terminar = 1;
return (1);
*raiz = r;
}
}
retira1_pila (&pila, &q, &i);
}
if (i < q->cont) {
}
r = q->apunt [i+1];
}
if (r->cont > N) {
return (1); }
} }
} if (i > 0)
if (i > 0) { i--;
Eliminación