У меня проблемы с объявлением новой кучи, пустой, с максимальным размером "емкость".
Структура кучи:
typedef struct {
/* number of elements on vector */
int size;
/* vector max size */
int capacity;
/*vector of pointers for elements*/
element_t** elements;
} heap;
Элемент_t структура:
typedef struct element_
{
char nameItem[100];
char expirationDate[11];
int qty;
int sellRate;
float priorityVal;
} element_t;
Функция, которая мне нужна для создания кучи, объявляется так, где аргумент емкость - это емкость кучи.
heap* new_heap(int capacity){
Функция, которая вставляет элементы в кучу:
int heap_insert(heap *h, element_t* elem)
{
element_t * aux;
int i;
//gilc
if(!h) return 0;
/* if heap is full, dont insert element */
if (h->size >= h->capacity)
return 0;
if (!elem)
return 0;
/* insert element in the end of the heap */
h->size++;
i = h->size;
h->elements[i] = elem;
/* while element has more prioritary than his father, trade them */
while (i != ROOT && bigger_than(h->elements[i], h->elements[FATHER(i)]))
{
aux = h->elements[FATHER(i)];
h->elements[FATHER(i)] = h->elements[i];
h->elements[i] = aux;
i = FATHER(i);
}
return 1;
//Default
return 0;
}
ОТЕЦ и КОРЕНЬ определены таким образом (я не понимаю, что это значит, было также предопределено для проекта)
#define FATHER(x) (x/2)
#define ROOT (1)
и bigger_than
вот так:
int bigger_than(element_t* e1, element_t* e2)
{
if (e1 == NULL || e2 == NULL)
{
return 0;
}
return e1->priorityVal > e2->priorityVal;
}
Какие вызовы malloc мне нужно использовать? Функция new_heap должна выделять всю память, необходимую для количества элементов, указанных в качестве аргумента емкости.