Пример #1
0
bool ListaClientes::ponElem(const Cliente &cliente){
	if (!esta(cliente))
	{
		_clientes[_numClientes]=cliente;
		_numClientes++;
		return true;
	}
	return false;
}
Пример #2
0
void retira_b (pagina **raiz, int x, int *s)
{
	int posicion, i, k;
	pagina *p, *q, *r, *t;
	LIFO1 pila;
	void init1_pila (struct LIFO1 *p);
	int pila1_vacia (struct LIFO1 *p);
	void ins1_pila (struct LIFO1 *p,pagina *s,int i);
	void retira1_pila (struct LIFO1 *p,pagina **s,int *i);
	*s = 1;
	init1_pila (&pila);
	esta (*raiz, x, &posicion, &pila);
	if (posicion == -1)
		*s = 0;  /* La llave no existe en el arbol */
	else {
		retira1_pila (&pila, &p, &i);
		if (!hoja (p)) {
			t = p;
			k = i;
			ins1_pila (&pila, p, i+1);
			p = p->apunt [i+1];
			while ( p != NULL) {
				ins1_pila (&pila, p, 0);
				p = p->apunt [0];
			}
			retira1_pila (&pila, &p, &i);
			t->info [k] = p->info [0];
			x = p->info [0];
			posicion = 0;
		}
		if (p->cont > N)
			retirar (p, posicion);
		else {
			if (!pila1_vacia (&pila)) {
				retira1_pila (&pila, &q, &i);
				if (i < q->cont) {
					r = q->apunt [i+1];
					if (r->cont > N) {
						retirar (p, posicion);
						cambio (p, q, r, i, x);
					}
					else {
						if (i != 0) {
						   r = q->apunt [i-1];
						   if (r->cont > N) {
								retirar (p, posicion);
								cambio(p,q,r,i-1,x);
						   }
						   else unir (raiz,q,r,p,
							i-1,pila,x,posicion);
						}
						else unir (raiz,q,r,p,i,pila,
							x,posicion);
					}
				}
				else {
					r = q->apunt [i-1];
					if (r->cont > N) {
						retirar (p, posicion);
						cambio (p,q,r,i-1,x);
					}
					else unir (raiz,q,r,p,i-1,pila,
							x, posicion);
				}
			}
			else {
				retirar (p, posicion);
				if (p->cont == 0) {
					free (*raiz);
					*raiz = NULL;
				}
			}
		}
	}
}