// OperandStack.h : 피연산자 스택의 클래스
|
하나
2
삼
4
5
6
7
8일
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#포함하다 &
#포함하다 &
#포함하다&
사용 네임스페이스 기본;
줄을 서서 비어 있는 실수(끊임없는 숯 *str) {
쿠우트 &<&< 거리 &<&< 끝;
출구(하나);
}
끊임없는 내부 MAX_STACK_SIZE = 20;
수업 피연산자 스택 {
내부 맨 위 = 0;
더블 데이터(MAX_STACK_SIZE); // 요소 배열
공공의:
OperandStack() { 상단 = –하나; }
부울 비었다() { 돌려 주다 맨 위 == –하나; }
부울 가득() { 돌려 주다 맨 위 == MAX_STACK_SIZE – 하나; }
비어 있는 누르다(더블 e) {
만약에 (isFull()) 오류(“스택 포화 오류”);
데이터(++맨 위) = 이자형;
}
더블 팝() {
만약에 (isEmpty()) 오류(“스택 오류”);
돌려 주다 데이터(위––);
}
};
|
CS |
// EvalPostfixMain.cpp
|
하나
2
삼
4
5
6
7
8일
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#포함하다 “OperandStack.h”
더블 calPostfixExpr(파일 *fp = 시간) {
숯 씨;
OperandStack st;
~하는 동안 ( (씨 = getc(fp)) != ‘\N’) {
만약에 (씨 == ‘+’ || 씨 == ‘-‘ || 씨 == ‘*’ || 씨 == ‘/’) {
더블 값2 = 성.팝();
더블 가치 1 = 성.팝();
스위치 (씨) {
사례 ‘+’: 성. 푸시(val1 + 값2); 부서지다;
사례 ‘-‘: 성. 푸시(val1 – 값2); 부서지다;
사례 ‘*’: 성. 푸시(val1 * 값2); 부서지다;
사례 ‘/’: 성. 푸시(val1 / 값2); 부서지다;
}
}
다른 만약에 (씨 >= ‘0’ && 씨 <= ‘9’) {
ungetc(c,fp);
더블 값;
fscanf_s(fp, “%lf”, &값);
성. 누르기(val);
}
}
돌려 주다 (성.팝());
}
내부 주로() {
쿠우트<< “수식 입력(접미사)= “;
더블 입술 = calPostfixExpr();
쿠우트 << “계산 결과” << 입술 << 끝;
OperandStack st = OperandStack();
~하는 동안 (!세인트 isEmpty()) {
더블 값 = 성.팝();
쿠우트 << 값 << 마지막으로;
쿠우트 << “—–“ << 끝;
}
돌려 주다 0;
}
|
CS |
![[Lv.1][정수 내림차순으로 [Lv.1][정수 내림차순으로](https://cu.sugok.kr/wp-content/plugins/contextual-related-posts/default.png)