【发布时间】:2019-01-11 09:06:24
【问题描述】:
我正在尝试从 bst 中删除一个节点 在线: ((strcmp((*A)->caracterise.nom , Etud.nom) == 0) && (strcmp((*A)->caracterise.prenom , Etud.prenom) == 0) && (( *A)->caracterise.note == Etud.note))
我在“* A”中收到对成员“caracterise”的 [错误] 请求,它的指针类型为“ABR {aka noud*}”(也许您打算使用“->”?)
注意:学生是学生; noud 是节点; caracterise 是学生信息; nom prenom note 是姓名姓氏 gpa; fG 是左 bst; fD 是正确的 bst; ABR 是 BST
struct etudiant
{
char nom[13];
char prenom[13];
float note;
};
struct noud
{
etudiant caracterise;
struct noud*fG;
struct noud*fD;
};
typedef struct noud*ABR;
void supprimer(ABR** A, etudiant Etud){
if ((strcmp((*A)->caracterise.nom , Etud.nom) == 0) && (strcmp((*A)->caracterise.prenom , Etud.prenom) == 0) && ((*A)->caracterise.note == Etud.note)) {
//if ((test(*A, Etud) == 0)&& (*A->caracterise.note == Etud.note)){
ABR* a;
a = (ABR*)malloc (sizeof(noud));
a = (*A)->fD ;
ABR* b;
b = (ABR*)malloc (sizeof(noud));
if ( a != NULL ) {
if ( a->fG != NULL ) {
while ( a->fG->fG != NULL ) {
a = a->fG ;
}
b = a->fG ;
b->fG = (*A)->fG ;
a->fG = b->fD ;
b->fD = (*A)->fD;
a = (*A);
(*A) = b ;
free(a);
}else{
a->fG = (*A)->fG ;
free(*A);
(*A) = a ;
}
}else{
a = *A ;
(*A) = (*A)->fG ;
free(a);
}
}else{
if ( v.priorite > (*A)->val.priorite ) {
supprimer(&(*A)->fD, Etud);
}else{
supprimer(&(*A)->fG, Etud);
}
}
}
【问题讨论】:
-
这就是你在 typedef 后面隐藏指针时得到的结果。
A是noud ***类型,所以*A是noud **类型,您无法使用->访问。 -
与你的错误无关,
a = malloc (sizeof(noud))后面紧跟a = (*A)->fD的赋值会导致内存泄漏。 -
这被称为业力,see this。尝试用不太复杂的数据类型重写这个程序。使用直观的变量名称。放弃指针取消引用以支持
[ ]索引。
标签: c pointers binary-search-tree