메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

p96 스택 GetPostfix함수에서 책의 내용과 예제가 다르네요.

2010-02-13

|

by chunlangs

2668

예제에서는

void GetPostfix( char* InfixExpression, char* PostfixExpression ) 함수에서

마지막에

else
        {/*토큰이 연산자(괄호 포함)일 때 이 토큰이 스택의 최상위 노드에 저장되어있는 연산자보다 우선순위가 높으면(왼쪽 괄호는 우선순위가 가장 낮다.)
                 스택에 삽입, 그렇지 않으면 결과에 출력*/
            while ( !LLS_IsEmpty( Stack ) &&
                    !IsPrior( LLS_Top( Stack )->Data[0], Token[0] ) )
            {
                Node* Popped = LLS_Pop( Stack );

                if ( Popped->Data[0] != LEFT_PARENTHESIS )
                    strcat( PostfixExpression, Popped->Data );
                
                LLS_DestroyNode( Popped );
            }
            
            LLS_Push( Stack, LLS_CreateNode( Token ) );//토큰의 연산자가 스택에 담겨있는 연산자보다 우선순위가 높으면 스택에 삽입
        }
    }



while ( !LLS_IsEmpty( Stack ) &&
                    !IsPrior( LLS_Top( Stack )->Data[0], Token[0] ) )  이 것이 책에서는

while ( !LLS_IsEmpty( Stack ) &&
                    !IsPrior( Token[0]  ,LLS_Top( Stack )->Data[0] ) ) 으로 나와잇네요.;; 수정해야할것 같아요.


그리고 이 함수에서

while ( !LLS_IsEmpty( Stack ) &&
                    !IsPrior( LLS_Top( Stack )->Data[0], Token[0] ) )
            {
                Node* Popped = LLS_Pop( Stack );

                if ( Popped->Data[0] != LEFT_PARENTHESIS )
                    strcat( PostfixExpression, Popped->Data );
                
                LLS_DestroyNode( Popped );
            }

이 부분 있잖아요.  LLS_Top(Stack)->Data[0]가 * 이고 , Token[0]이 +이라면,  LLS_Top(Stack)->Data[0]가 출력 되는건가요?

후의표기법에 의해?  그리고 Token[0]은  *가 사라졌으므로 다시 스택에 저장되는 것인가요??



이 함수는 뭔가 알듯 말듯하면서도 어렵네요;; 이렇게 복잡하게 쓴 것은 초보자인 저로서는 첨봤네요^^;

아직 완벽하게 이해를 못하겟는데 , 아무쪼록 설명부탁드려요^^.
댓글 입력