7장 P.Q 및 HEAP 코드에서 궁금한거 있습니다.
2011-05-18
|
by bogunbabo1
2411
void HEAP_DeleteMin( Heap* H, HeapNode* Root )
{
int ParentPosition = 0;
int LeftPosition = 0;
int RightPosition = 0;
memcpy(Root, &H->Nodes[0], sizeof(HeapNode));
memset(&H->Nodes[0], 0, sizeof(HeapNode));
H->UsedSize--;
HEAP_SwapNodes( H, 0, H->UsedSize );
LeftPosition = HEAP_GetLeftChild( 0 );
RightPosition = LeftPosition + 1;
while ( 1 )
{
int SelectedChild = 0;
if ( LeftPosition >= H->UsedSize )
break;
if ( RightPosition >= H->UsedSize )
{
SelectedChild = LeftPosition;
}
else {
if ( H->Nodes[LeftPosition].Data > H->Nodes[RightPosition].Data)
SelectedChild = RightPosition;
else
SelectedChild = LeftPosition;
}
if ( H->Nodes[SelectedChild].Data < H->Nodes[ParentPosition].Data )
{
HEAP_SwapNodes(H, ParentPosition, SelectedChild);
ParentPosition = SelectedChild;
}
else
break;
LeftPosition = HEAP_GetLeftChild(ParentPosition);
RightPosition = LeftPosition + 1;
}
if ( H->UsedSize < ( H->Capacity / 2 ) )
{
H->Capacity /= 2;
H->Nodes =
(HeapNode*) realloc( H->Nodes, sizeof( HeapNode ) * H->Capacity );
}
}
아 참고로 전.. 공과대도 안나왔으며.. 적지 않은 29이라는 나이에 프로그래밍 공부를 시작한 사람입니다.
아직 한달도 안됬고요...ㅎㅎ;;
그래서 제질문이 요상괴상 망측에.. 프로그래머로서 이해가 안되실수도 있지만.. 그래도 궁금하기에 올립니다.
위의 예제는 HEAP의 예제 내용중.. 최소값 제거.. 즉 루트/최소값을 제거하고 정리하는 함수입니다.
함수 호출시 입력되는 매개변수 Root 와..사용용도가 궁금해서요..
3번째 줄에 사라질 최소값.. 즉 사라질 루트값을 저장하는것 빼고는.. 사용하는게 없는거 같습니다..;;;
만약 용도가 사라질 최소값을 저장하는 기능이라면.. 이것이 프로그래밍 할때 어떤 이점이 있는지도 궁금합니다.^^;;