我一直在嘗試實施一個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;'? –