Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C实现二叉搜索树_C_Pointers - Fatal编程技术网

C实现二叉搜索树

C实现二叉搜索树,c,pointers,C,Pointers,我一直在尝试用C实现一个bst。我想我差不多实现了,但是在我的add node函数中,我创建了一个名为current的临时节点来存储树中访问的当前节点。然后,当我修改当前节点时,我的原始指针在函数完成后不会被修改 我已经读过了,我想我可能需要一个指针的指针,但我仍然不知道如何更新原始结构。你是对的,问题与bstlist\u add中指向指针的指针有关。下面是一个示例,它可以帮助您找出需要在代码中更改的内容 int a=10; int b=20; void noChange(int * pSom

我一直在尝试用C实现一个bst。我想我差不多实现了,但是在我的add node函数中,我创建了一个名为current的临时节点来存储树中访问的当前节点。然后,当我修改当前节点时,我的原始指针在函数完成后不会被修改


我已经读过了,我想我可能需要一个指针的指针,但我仍然不知道如何更新原始结构。

你是对的,问题与
bstlist\u 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;
}

前一天,另一个人来做同样的运动。添加家庭作业标记…不要强制转换malloc的返回值:您认为问题出在哪里?顺便说一句,wtf是这样的:
struct node**current=&(*string)->root?我认为问题不存在-这就是为什么它是一个评论,而不是一个答案:)我没有看到一个问题。我看到“我想我可能需要一个指针中的指针”,后面是一堆代码。你有什么问题吗?谢谢,我一直在寻找的只是一个例子或解释,我不知道为什么像Manos这样的一些用户如此急躁。最后一件事。由于我必须实现一个特定的头,因此无法将参数更改为Bst**Bst,我应该创建另一个单独的函数,还是有更好的方法来实现这一点?@user557240:关于作业完整性,这是一个非常重要的问题。如果你没有正确标记作业问题,有人可能会因为帮你完成作业而破坏作业。所以,一定要给家庭作业问题贴上标签,并提供到目前为止你所得到的(即使/尤其是如果它不正确的话)。人们可能会帮助您克服直接的障碍(并提供辅助注释,如malloc返回值),而不会破坏赋值。@user557240:您不需要将函数签名更改为bstree\u add。bstTree指向指向根的bst。您可以更改该bst的根,而无需指向其他bst。因此bstTree很好。@ccoakley,谢谢,下次我会记得添加适当的标记。我现在要试着编写代码。