【发布时间】:2021-06-11 08:49:41
【问题描述】:
我想将堆的记录元素保存在 struct _Record 变量中,然后删除该记录,删除记录后我想返回保存的记录。我怎样才能做到这一点?
struct _Record
{
int id;
char name[15];
char surname[15];
char email[26];
int grade;
};
//struct _Record saved = hp->elem[0].record;在这里我尝试分配给另一个名为 saved 的变量。
struct _Record deleteNode(minHeap *hp) {
struct _Record saved;
if(hp->size) {
saved = hp->elem[0].record;
hp->elem[0] = hp->elem[--(hp->size)] ;
hp->elem = realloc(hp->elem, hp->size * sizeof(node)) ;
heapify(hp, 0) ;
printf("%d %s %s %s %d",saved.id,saved.name,saved.surname,saved.grade);
return saved;
} else {
printf("\nMin Heap is empty!\n") ;
free(hp->elem);
return saved;
}
}
最小可重现示例:
int main(){
minHeap heap = initMinHeap();
struct _Record rec;
rec.id=1;
strcpy(rec.name,"tName");
strcpy(rec.surname,"tSurname");
strcpy(rec.email,"email");
rec.grade=10;
node node;
node.record = rec;
insertNode(&heap,node);
struct _Record saved;
saved = deleteNode(&heap);
printf("%s","\n");
printf("%d %s %s %s %d",saved.id,saved.name,saved.surname,saved.email,saved.grade);
return -1;
}
注意:其他堆函数工作正常。在deleteNode中返回保存的节点有问题。
我得到的结果:没有
我想要得到的结果:“1 tName tSurname email 10”
【问题讨论】:
-
什么是“堆”?您分配项目的数据类型是堆还是堆内存?
minHeap是什么?struct _Record saved = hp->elem[0].record;后跟return不正是在做你想做的事吗?请说明您获得了什么结果以及您想要获得什么结果。 -
函数写错了顺便说一句,它必须总是返回一个项目。你应该做类似
struct record saved = NULL; if(hp->size) saved = ...; else { ... } return saved;的事情。 -
与问题无关,我们不允许使用前导下划线后跟大写字母来命名变量。这是为库实现保留的。
-
@Lundin 是的,这是我想要的,但它不起作用。当我尝试打印保存的记录时,没有打印任何内容。
-
你能发一个minimal reproducible example来显示这种行为吗?