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]은 *가 사라졌으므로 다시 스택에 저장되는 것인가요??
이 함수는 뭔가 알듯 말듯하면서도 어렵네요;; 이렇게 복잡하게 쓴 것은 초보자인 저로서는 첨봤네요^^;
아직 완벽하게 이해를 못하겟는데 , 아무쪼록 설명부탁드려요^^.