Notice
Recent Posts
Recent Comments
Link
헬창 개발자
스택을 이용한 후위 표기, 연산 : 파이썬 본문
설계도
코드
class stack:
def __init__(self):
self.data= [] #스택 생성
self.cnt =0
def push(self,data): # 삽입 함수
self.data.append(data)
self.cnt += 1
def isempty(self): # 공백 체크
return len(self.data)==0
def pop(self): # 삭제 함수
if not self.isempty():
self.cnt -= 1
return self.data.pop()
def size(self):
return len(self.data)
def postfix(self, a): # 후위표기식 변경
self.temp = '' # 후위표기식 저장
for i in a:
if i.isdigit(): # 숫자면 저장
self.temp+=i
else: # 아니면 스택에 푸시
if i == '(':
self.push(i)
elif i == '*' or i == '/':
# self.data에 값이 있고
# 스택 top이 *,/ 이면 팝
while self.data and (self.data[-1] == '*' or self.data[-1] == '/'):
self.temp += self.pop()
self.push(i)
elif i == '+' or i == '-':
# self.data에 값이 있고
# 스택 top이 (아니면 팝
while self.data and self.data[-1] != '(':
self.temp += self.pop()
self.push(i)
elif i == ')':
# self.data에 값이 있고
# 스택 top이 (아니면 팝
while self.data and self.data[-1] != '(':
self.temp += self.pop()
self.pop()
while self.data: # 남은 스택에 저장된값 팝
self.temp+=self.pop()
return self.temp
def calculate(self,a): # 후위표기식 계산
for j in a:
if j == '+':
self.push(self.pop() + self.pop())
elif j == '-':
self.push(-(self.pop() - self.pop()))
elif j == '*':
self.push(self.pop() * self.pop())
elif j == '/':
p = self.pop()
self.push(self.pop() / p)
else:
self.push(int(j))
return self.pop()
if __name__=="__main__":
cal = stack()
ev= "3+5*2/(7-2)"
print(cal.postfix(ev))
postev=cal.postfix(ev)
print(cal.calculate(postev))
결과 화면
'자료구조' 카테고리의 다른 글
해시 함수 : 파이썬 (0) | 2021.08.12 |
---|---|
큐를 이용한 은행 업무 시스템 : 파이썬 (0) | 2021.07.30 |
이진 트리를 이용한 연락처 프로그램 : C언어 (0) | 2021.07.28 |
큐를 이용한 피보나치 수열 : C언어 (0) | 2021.07.27 |
깊이 우선 탐색(dfs), 넓이 우선 탐색(bfs) 구현 : C언어 (0) | 2021.07.23 |
Comments