Esempio n. 1
0
// inserarea unui produs in heap
// e o formula: iei numarul de noduri, adaugi 1, il scrii in baza 2 (numa 0 si 1), elimini prima cifra si parcurgi cifra cu cifra ce ai obtinut;
// daca dai de 0, mergi in jos la stanga pe heap; daca dai de 1, la dreapta; cand nu mai ai cifre, ai ajuns in locul in care trebuie inserat un nou nod;
void insereaza(heap* h, produs* p, int numar, int putere)
{
	if (p->pret < h->curent->pret)
	{
		interschimba(&p, &h->curent);
	}

	if (numar - putere >= 0)
	{
		if (putere / 2 > 0)
		{
			insereaza(h->dreapta, p, numar - putere, putere / 2);
		}
		else
		{
			h->dreapta = nou_heap(p);
		}
	}
	else
	{
		if (putere / 2 > 0)
		{
			insereaza(h->stanga, p, numar, putere / 2);
		}
		else
		{
			h->stanga = nou_heap(p);
		}
	}
}
Esempio n. 2
0
int main()
{
	S=stivaVida();
	Q=coadaVida();
	
	push(3);
	push(5);
	push(7);
	afisares(S);

	printf("\n%d\n",top());
	pop();
	pop();
	afisares(S);

	printf("\n%d\n",top());
	pop();
	afisares(S);
	

	insereaza(3);
	insereaza(5);
	insereaza(7);
	afisareq(Q);

	
	printf("\n%d\n",citeste());
	elimina();
	afisareq(Q);
	
	printf("\n%d\n",citeste());
	elimina();
	afisareq(Q);

	insereaza(9);
	afisareq(Q);

	elimina();
	elimina();
	afisareq(Q);
	

	system("pause");
	return 0;
}
Esempio n. 3
0
// functie care baga produsul p in heapul categoriei c
void insereaza_pc(categorie* c, produs* p)
{
	if (c->numar == 0)
	{
		c->produse->curent = p;
	}
	else
	{
		// vrem cea mai mare putere a lui 2 mai mica decat numarul de noduri + 1
		int putere = 1;
		while (putere <= c->numar + 1)
		{
			putere *= 2;
		}
		putere /= 2;
		insereaza(c->produse, p, c->numar + 1 - putere, putere / 2);
	}

	c->numar++;
}