【发布时间】:2019-05-06 16:12:45
【问题描述】:
我在声明一个具有最大“容量”大小的新堆时遇到问题。
堆结构:
typedef struct {
/* number of elements on vector */
int size;
/* vector max size */
int capacity;
/*vector of pointers for elements*/
element_t** elements;
} heap;
Element_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;
}
FATHER 和 ROOT 是这样定义的(我不明白这是什么意思,也是为项目预定义的)
#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 必须为指定为参数容量的元素数量分配所有必要的内存。
【问题讨论】:
-
请edit 您的问题添加更多信息:您是否希望函数
new_heap为指定为参数capacity的元素数量分配所有必要的内存?您是否需要使用指针向量element_t **elements?否则,我建议使用简单的指针element_t *elements并将其用作大小为int capacity的动态分配数组。 -
已编辑,指针向量 element_t **elements 是什么意思?
-
@RicardoSilva 我的回答应该在您编辑后对您有用。
-
@RicardoSilva 我刚刚从您的代码中引用了注释
/*vector of pointers for elements*/。使用“指针向量”,您将需要指针数组的内存和指针应该指向的所有元素的内存。您要么必须为单个element_t分配capacity倍的内存,要么必须分配一个可以容纳element_t的capacity元素的数组。而且您必须为指针数组中的所有指针分配正确的地址。 -
我考虑过使用 element_t *elements 但这是一个学校项目,我无法更改结构的声明方式...
标签: c