반응형








괄호가 없는 식일 때 Infix (중위표기식)에서 Postfix (후위표기식) 로 바꾸는 방법을 구현해 보았다.


이 과정에서는 연산자의 위치를 결정하기 위해 STACK을 이용하였다.



보고서 및 전체 소스 다운받으러 가기



예를들어 a+b*c 라는 식을 후위표기식으로 변환한다고 해보자.



연산자를 위한 STACK을 만들고 연산자를 만났을 때 STACK에 저장한다.


이 과정에서 연산자의 우선순위를 생각해 주어야 하는데, 우선순위는 우리가 일반적으로 알고 있는것과 같이 *,/ 가 +,- 보다


더 높은 경우들을 생각하면 된다.


이러한 우선순위를 적용하기 위해 프로그램 내에서 따로 우선순위를 결정해주는 함수를 만들어 주었다.






다음과 같은 함수를 만들어 주고, parameter로 연산자 문자를 받으면 그 문자가 어떤 문자인지에 따라서


우선순위를 return 해 주는 형식이다.


제곱인 ^를 우선순위가 제일 높은 3으로, *, /, % 연산을 2로, +, -를 1로 return 될수 있게 해주었으며 그 외에는 -1이 return되게


하여 예외처리를 해 주었다.



연산과정에서 연산자 STACK의 Top에 있는 연산자 우선순위를 검사한다.


그 뒤에 STACK에 새롭게 들어올 연산자의 우선순위를 검사한뒤 두개를 비교하고, 


Top에 있는 연산자 우선순위가 새롭게 들어올 연산자의 우선순위보다 더 작을 때


새로운 연산자는 STACK에 들어오게 된다.



반대로 새롭게 들어올 연산자의 우선순위가 Top에 있는 연산자 우선순위보다 더 낮거나 같으면 


먼저 Output에 현재 연산자 STACK top위치에 있는 연산자를 pop해서 출력해주고, 


새로들어온 연산자를 다시 연산자 STACK에 push해준다.



식을 모두 검사한 뒤에는 연산자 STACK에 있는 연산자들을 차례대로 Pop해주어 Ouput에 연결해 준다.


이제 Output을 출력하면 Postfix 된 식이 출력될 것이다.






결과를 출력해 보면

먼저 input data가 다음과 같을 때


Output으로 출력되는 결과 역시 제대로 출력되는 것을 확인할 수 있었다.






보고서 및 전체 소스 다운받으러 가기




반응형

+ Recent posts