vidigummy KAU/2018년도 1학기 자료구조와 C++

4번 과제((Reverse polish (expression || notation)) && stack

vidi 2018. 5. 28. 13:45

1. '(' 를 만나면 스택에 푸시한다.

 

2. ')' 를 만나면 스택에서 '('가 나올 때까지 팝하여 출력하고 '(' 는 팝하여 버린다.

 

3. 연산자를 만나면 스택에서 그 연산자보다 낮은 우선순위의 연산자를 만날 때까지 팝하여 출력한 뒤에 자신을 푸시한다.

 

4. 피연산자는 그냥 출력한다.

 

5. 모든 입력이 끝나면 스택에 있는 연산자들을 모두 팝하여 출력한다.

 

후위 계산법 자체는 문제가 되지 않지만, 중위 계산식을 후위계산식으로 바꾸는 것에서 어려움을 많이 겪었다. 그래서 중위계산식을 후위계산식으로 변환시키기 위해 void Template::ITP 를 만들고 그에 따른 보조 함수로 IsOperator(연산자인지 아닌지 확인), precedence(연산자의 우선순위 확인)를 만들었다. 또한 계산을 위해 calculate와 그에 따른 출력 메써드 PrintAll 그리고 그것의 보조 함수 cpy를 만들어 단계에 따라 작성하였다.( 입력 부분에서 소수점을 처리하지 않았다는 문제가 있긴 하지만)


infix.cpp