나는 C에서 bst를 구현하려고 시도 해왔다. 나는 거의 거기에 있다고 생각하지만, 노드 추가 기능에서 current라는 임시 노드를 생성하여 현재 노드를 저장한다. 트리에서 방문합니다. 그런 다음 현재 노드를 수정하면 기능 완료 후 내 orignal 포인터가 수정되지 않습니다.C 이진 검색 트리 구현
나는 이것을 읽었고, 포인터 포인터가 필요할 것이라고 생각했지만, 원래 구조체를 어떻게 업데이트 할 지 잘 모르겠습니다.
나는 C에서 bst를 구현하려고 시도 해왔다. 나는 거의 거기에 있다고 생각하지만, 노드 추가 기능에서 current라는 임시 노드를 생성하여 현재 노드를 저장한다. 트리에서 방문합니다. 그런 다음 현재 노드를 수정하면 기능 완료 후 내 orignal 포인터가 수정되지 않습니다.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;
}
내가 찾던 모두가 모범이나 설명 이었기 때문에 Manos와 같은 일부 사용자가 너무 편한 이유는 모르겠다. – 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;'? –