我一直在尝试实施一个bst,在C.我想我几乎在那里,但在我的add节点功能,我创建一个临时节点称为当前存储当前节点在树中被访问。然后当我修改当前节点时,我的信号指针在函数完成后不会被修改。C实现二叉搜索树
我读过这个,我想我可能需要一个指针的指针,但我仍然不知道如何更新原始结构。
我一直在尝试实施一个bst,在C.我想我几乎在那里,但在我的add节点功能,我创建一个临时节点称为当前存储当前节点在树中被访问。然后当我修改当前节点时,我的信号指针在函数完成后不会被修改。C实现二叉搜索树
我读过这个,我想我可能需要一个指针的指针,但我仍然不知道如何更新原始结构。
你说得对,问题与bstlist_add
中指针的指针有关。这里有个例子可以帮助你弄清楚你需要在代码中改变什么。
int a=10;
int b=20;
void noChange(int * pSomeInt);
void change(int ** ppSomeInt);
int main(int argc,char * argv[])
{
int * pMainInt=&a;
noChange(pMainInt);
//pMainInt will still point to a
//since the parameter to change is int **, we have to use & here
change(&pMainInt);
//pMainInt now points to b
return 0;
}
void noChange(int * pSomeInt)
{
//while pSomeInt is a pointer, it is a copy of pMainInt, not a pointer to it
//so this creates a pointer to the parameter, pSomeInt, itself
int ** ppSomeInt=&pSomeInt;
//so this changes the parameter, pSomeInt
*ppSomeInt=&b;
}
void change(int ** ppSomeInt)
{
//ppSomeInt is a pointer to pMainInt, which is itself an int *
//so *ppSomeInt is pMainInt and not a copy of it
*ppSomeInt=&b;
}
感谢我所寻找的只是一个例子或解释,我不知道为什么一些用户,如马诺斯是如此逼迫。 – user557240
只是最后一件事。由于我必须实现特定的头文件,因此不能将参数更改为Bst ** bst,我应该创建另一个单独的函数,还是有更好的方法来执行此操作? – user557240
@ user557240:这是关于家庭作业完整性的一件事情。如果您没有正确标记作业问题,有人可能会为您完成作业而损坏作业。因此,请始终标记作业问题并提供您目前为止的内容(甚至是/尤其是如果它不正确)。人们可能会帮助你处理你的直接绊脚石(并提供诸如malloc返回值之类的辅助评论)而不会破坏任务。 – ccoakley
在另一个人前一天进行相同的练习。添加作业标签... – Manos
不要施加'malloc'的返回值:http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc – gnud
你为什么认为问题出在那里? btw wtf是这样的:'struct node ** current =&(* string) - > root;'? –