계산기 : 수식을 입력받아 계산하여 출력한다
계산기를 만들려고 할때의 데이터들로 순회구조를 변환해 본다
operator +,-,*,/ 만 가능하다고 가정(사칙연산)
Operand : 연산자 양쪽에 있는 자료형
이때의 Operand 는 정수만 가능하다고 가정
* 중위 표기법 (Infix Notation) A + B
- 우선순위를 위해 괄호를 사용해야 함
*후위 표기법(Postfix Notation):
수식을 계산하기 위한 알고리즘이 단순!
- 괄호를 쓰지 않아도 연산 가능
AB+
*전위 표기법 (Prefix Notation)
- Operator 가 두 Operand 앞에 있음
+AB
중위를 후위 표기법으로 알고리즘을 풀기 위해 중위로된 식을 후위 표기법으로 변환 해야 한다
the way that 1. 중위 표기법에서 괄호가 씌워져 있는 경우에만
조건 A+B*C 에 대한 연산이 완전한 괄호로 되어 있어야 한다
ex) (A+(B*C))
알고리즘( 결과 저장소는 String 이라 가정 )
1. '(' 문자는 무시한다
2. Operand(숫자) 는 그대로 결과저장소에 추가( += )
-하나의 숫자(항) 이 입력되면 구분하기 위해 ' ' 을 추가로 입력해 준다
3. Operator(연산자) 는 Stack 에 PUsh 한다
- 저장소에 연산자를 저장할때 여산자와 구분을 하기 위해서 스택에서 빼오 연산자를 저장소에 넣은 후 ' ' 을 하나 연달아 넣어준다,
4. ')' 를 만나면 Stack 에서 Pop 하여 결과저장소에 추가 ( += )
the way that 2. 중위 표기법에서 괄호가 없는 경우
먼저 연산자 우선 순위를 정해야 한다
'(' : 0
+,- : 1
*,/ : 2
로 우선 순위를 매기고
'알고리즘 & 자료구조 > 알고리즘&자료구조' 카테고리의 다른 글
계산기 프로그램 (중위->후위) (0) | 2012.10.31 |
---|---|
문자를 숫자로 변환, int 변수의 숫자를 한개씩 때오기 (0) | 2012.10.31 |
큐(Queue) & 환원큐 Circular Queue (0) | 2012.10.31 |
단일연결리스트 스택 (0) | 2012.10.31 |
스택 , 배열과 리스트 자료구조의 차이 (0) | 2012.10.31 |