Вы находитесь на странице: 1из 3

#include<stdio.

h>
#include<malloc.h>
#include<string.h>

struct Client{
char* numeClient;
int prioritate;
};

Client initClient(const char* nume, int prioritate){


Client c;
c.prioritate = prioritate;
c.numeClient = (char*)malloc(sizeof(char)*(strlen(nume) + 1));
strcpy(c.numeClient, nume);
return c;
}

void afisareClient(Client c)
{
printf("Prioritate: %d , nume client :%s\n", c.prioritate, c.numeClient);
}

struct Heap
{
Client* vector;
int dim;
};

void afisareHeap(Heap heap){


for (int i = 0; i < heap.dim; i++){
afisareClient(heap.vector[i]);
}
}

void filtrare(Heap heap,int pozitie)


{
int fiuS = 2 * pozitie + 1;
int fiuD = 2 * pozitie + 2;
int max = pozitie;
if (fiuS < heap.dim && heap.vector[max].prioritate <
heap.vector[fiuS].prioritate)
{
max = fiuS;
}
if (fiuD < heap.dim && heap.vector[max].prioritate <
heap.vector[fiuD].prioritate)
{
max = fiuD;
}
if (max != pozitie)
{
Client aux = heap.vector[max];
heap.vector[max] = heap.vector[pozitie];
heap.vector[pozitie] = aux;
if (2 * max + 1 < heap.dim)
{
filtrare(heap, max);
}
}
}

Client extragereHeap(Heap &heap)


{
if (heap.dim > 0)
{
Client rezultat = heap.vector[0];
Client* temp = (Client*)malloc(sizeof(Client)*(heap.dim - 1));
for (int i = 0; i < heap.dim - 1; i++){
temp[i] = heap.vector[i + 1];
}
free(heap.vector);
heap.vector = temp;
heap.dim--;
for (int i =(heap.dim-2)/2;i>=0;i--)
{
filtrare(heap, i);
}
return rezultat;
}
else{
return initClient("Negasit", -1);
}
}

void inserareHeap(Heap &heap,Client c)


{
if (heap.dim > 0)
{
Client* temp = (Client*)malloc(sizeof(Client)*(heap.dim + 1));
for (int i = 0; i < heap.dim; i++)
{
temp[i] = heap.vector[i];
}
temp[heap.dim] = c;
free(heap.vector);
heap.vector = temp;
heap.dim++;
for (int i = (heap.dim - 2 / 2); i >= 0; i--)
{
filtrare(heap, i);
}
}
}

void afisareCuPrioritate(Heap &heap,int prioritate)


{
while (heap.dim > 0 && heap.vector[0].prioritate >= prioritate)
{
Client c = extragereHeap(heap);
afisareClient(c);
free(c.numeClient);
}
}

void main()
{

Heap heap;
heap.dim = 6;
heap.vector = (Client*)malloc(sizeof(Client)*(heap.dim));
heap.vector[0] = initClient("Coco",1);
heap.vector[1] = initClient("Momo", 7);
heap.vector[2] = initClient("Vuvu", 3);
heap.vector[3] = initClient("Lulu", 6);
heap.vector[4] = initClient("Gogo", 8);
heap.vector[5] = initClient("Gigi", 2);

afisareHeap(heap);
printf("\n");
for (int i = (heap.dim - 2 / 2); i >= 0; i--)
{
filtrare(heap, i);
}
afisareHeap(heap);
printf("\n");

Client c = extragereHeap(heap);
free(c.numeClient);
afisareHeap(heap);
printf("\n");
inserareHeap(heap, initClient("Zuzu", 9));

printf("\n");
afisareHeap(heap);

printf("\n");
afisareCuPrioritate(heap, 6);

Вам также может понравиться