목차
1. 중위 표기법, 후위 표기법
2. 후위 표기식 연산 방법
3. class Cal_post_fix
4. 테스트
1. 중위 표기법, 후위 표기법
1) 중위 표기법(Infix Notation)
- 연산자를 피연산자의 가운데 표기하는 방법을 말한다.
ex) A+B, A*B-C/D, A-B*C+D
2) 후위 표기법(Postfix Notation)
- 연산자를 피연산자 뒤에 표기하는 방법을 말한다.
ex) AB+, AB*CD/-, ABC*-D+
2. 후위 표기식 연산 방법
후위 표기식을 입력받아 연산하는 방법은 다음의 과정과 같다.
1. 피연산자를 만나면 스택에 push한다.
2. 연산자를 만나면 필요한 만큼의 피연산자를 스택에서 pop하여 연산하고, 연산 결과를 다시 스택에 push한다.
3. 수식이 끝나면, 마지막으로 스택을 pop하여 출력한다.
3. class Cal_post_fix
class Cal_post_fix:
def __init__(self, exp: str):
self.stack = Stack_array() # 스택
self.postfix = exp # 후위 표기식
# self.size = len(self.postfix)
for tmpch in self.postfix:
if tmpch!='+' and tmpch!='-' and tmpch!='*' and tmpch!='/': # 피연산자 처리
self.stack.push(int(tmpch))
else: # 연산자 처리
tmp2 = self.stack.pop()
tmp1 = self.stack.pop()
if tmpch=='+':
tmp2 = tmp1 + tmp2
if tmpch=='-':
tmp2 = tmp1 - tmp2
if tmpch=='*':
tmp2 = tmp1*tmp2
if tmpch=='/':
tmp2 = tmp1/tmp2
self.stack.push(tmp2)
self.result = self.stack.pop()
def res(self)-> int:
return self.result
4. 테스트
if __name__ == "__main__":
a = Cal_post_fix('23*63/-')
print(a.res())
b = Cal_post_fix('523*-7+')
print(b.res())
예상 출력:
'''
4.0
6
'''
전체 코드는 github에 올려두었습니다.
github.com/imgzon3/algorithm/blob/main/Stack/cal_post_fix.py
'cs > 자료구조' 카테고리의 다른 글
[Queue]15. Queue 종류 (0) | 2021.02.20 |
---|---|
[Queue]14. Queue(큐) (0) | 2021.02.20 |
[Stacks]12. Linked list-based Stack(연결 리스트 기반 스택) 구현 (0) | 2021.02.20 |
[Stacks]11. Array-based Stack(배열 기반 스택) 구현 (0) | 2021.02.19 |
[Stacks]10. Stack ADT(스택) (0) | 2021.02.19 |
댓글