[[프로그래밍_NOTE]]/C , C++

수식변환 알고리즘 ( stack 이용 )

갑빠돌격기 2008. 8. 13. 15:38

///////////////////////////////////////////////////////////////////////////////

1. 중위법
    ((2*3)+(6/2))-4          // 사람들이 흔히 사용하는 수식의 표현    
    2*3+6/2-4                 //  괄호의 생략

2. 후위법
    23*62/+4-
   
///////////////////////////////////////////////////////////////////////////////

     ㄱ .중위법을 후위법으로 변화하는 알고리즘 - I
        // 전제 : 중위표기법이 반드시 괄호를 포함하고 있어야 한다.
            1. '(' 문자는 무시하고 넘어간다.
            2. 피연산자는 그대로 출력한다.
            3. 연산자는 스택에 푸시한다.
            4. ')' 를 만나면 스택에서 팝하여 출력한다.

     ㄴ. 중위법을 후위법으로 변화하는 알고리즘 - II
        // 괄호가 생략되어 있어도 가능
        // 연산자에 고유의 숫자를 주어서 우선순위를 부여한다.
        // '('        ->   0
        // '+' '-'   ->   1
        // '*' '/'   ->   2
           1. '('를 만나면 스택에 푸쉬
           2. ')'를 만나면 스택에서 '('가 나올때까지 팝하여 출력 '('는 팝하여 버린다.
           3. 연산자를 만나면 스택에 그 연산자보다 낮은 우선순위의 연산자를 만날때까지
              팝하여 출력한 위에 자신을 푸시한다.
           4. 피연산자는 그냥 출력한다.
           5. 모든 입력이 끝나면 스택에 있는 연산자들을 모두 팝하여 출력한다.