// 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); } } }
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; }
// 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++; }