2011-10-21 220 views
2

我一直在嘗試實施一個bst,在C.我想我幾乎在那裏,但在我的add節點功能,我創建一個臨時節點稱爲當前存儲當前節點在樹中被訪問。然後當我修改當前節點時,我的信號指針在函數完成後不會被修改。C實現二叉搜索樹

我讀過這個,我想我可能需要一個指針的指針,但我仍然不知道如何更新原始結構。

+1

在另一個人前一天進行相同的練習。添加作業標籤... – Manos

+0

不要施加'malloc'的返回值:http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc – gnud

+2

你爲什麼認爲問題出在那裏? btw wtf是這樣的:'struct node ** current =&(* string) - > root;'? –

回答

1

你說得對,問題與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; 
} 
+0

感謝我所尋找的只是一個例子或解釋,我不知道爲什麼一些用戶,如馬諾斯是如此逼迫。 – user557240

+0

只是最後一件事。由於我必須實現特定的頭文件,因此不能將參數更改爲Bst ** bst,我應該創建另一個單獨的函數,還是有更好的方法來執行此操作? – user557240

+1

@ user557240:這是關於家庭作業完整性的一件事情。如果您沒有正確標記作業問題,有人可能會爲您完成作業而損壞作業。因此,請始終標記作業問題並提供您目前爲止的內容(甚至是/尤其是如果它不正確)。人們可能會幫助你處理你的直接絆腳石(並提供諸如malloc返回值之類的輔助評論)而不會破壞任務。 – ccoakley