앞서 우리는 논의 후위 식을 수행했다. 피연산자가 발생하면 후위 식 연산 처리를 순차적으로 전체 포스트 픽스를 검색하는 제 오퍼랜드 스택으로 설정된 후 누름 조작의 수는 해당 팝업에서 연산자 오퍼랜드 스택 발생하면 동작 및 누름 동작의 결과 피연산자. 전체가 후위를 스캔 할 때, 오퍼랜드 스택은 단지 하나의 엘리먼트이어야 요소는 계산 결과 후위 식의 값이다.
후위 표현 :
1 2 3 + -
접두사 대응 식이다 :
-1 + 2 (3)
계산 프리픽스 식 산출 방법의 후위 표현과 유사하다. 전면, 세트 오퍼랜드 스택 위로부터 스캔 프리픽스 식 피연산자이면 스택 직접 오퍼랜드 스택에서 팝 운전 조작에 대응하는 조작을 수행하는 경우, 및 결과는 밀어 넣습니다. 다음, 하나의 요소가 스택 피연산자한다 전체 프리픽스 발현까지 오른쪽에서 왼쪽으로 스캔 프리픽스 식 결과의 요소의 값을 비교.
다음과 같이 접두사 표현 구체적인 계산 과정은 다음과 같다 :
1 // 计算前缀表达式 2 #INCLUDE <iostream> 3 #INCLUDE <sstream> 4 #INCLUDE <벡터> 5 #INCLUDE <적층> 6 #INCLUDE < 문자열 > 7 사용 공간이 수 std; 8 9 공극 GetPrefix (벡터 < 문자열 > 및 접두어) 10 { 11 prefix.clear (); 12 문자열 라인, tmp를; 13 의 getline (CIN, 행); 14 istringstream 죄 (행); 15 일 동안 (SIN >> TMP) 16 { 17 prefix.push_back (TMP); 18 } 19 } 20 21 부울 IsOperator ( CONST 문자열 및 OP) 22 { 23 반환 OP == " + " || 연산 == " - " || 연산 == " * " || OP == " / " ; 24 } 25 26 번 CalPrefix ( CONST 벡터 < 문자열 > 및 접두어) 27 { 28 번 RET는 = 0.0 ; 29 스택 < 더블 > opeStk; 30 대 ( INT I = prefix.size () - 1 ] I> = 0 - I) 31 { 32 의 경우 (! IsOperator (접두사 [I])) 33 { 34 opeStk.push (( 이중 (접두사으로 atof) [I] .c_str ())); 35 } 36 또 37 { 38 번 A = opeStk.top (); (39) () opeStk.pop; 40 번 B는 = opeStk.top을 (); 41 opeStk.pop (); 42 번 C는 = 0.0 ; 43 44 스위치 (접두사 [I] [ 0 ]) (45) { 46 의 경우 ' + ' : 47 C = A + B; 48 opeStk.push (c); 49 휴식 ; (50) (51)는 케이스 ' - ' : 52 C는 A = - B 단계; (53) opeStk.push (c); 54 체류 ; (55) (56) 의 경우 ' * ' : 57 C = A * B; 58 opeStk.push (c); 59 체류 ; (60) (61) 의 경우 ' / ' : 62 C = A / B; 63 opeStk.push (c); 64 체류 ; 65 66 기본 : 67 휴식 ; 68 } 69 } 70 } 71 72 경우 (opeStk.size () == 1 ) 73 { 74 창 opeStk.top (); 75 } 76 또 77 { 78 리턴 - 1000000000.0 ; 79 } 80 } 81 82 INT의 주 () 83 { 84 벡터 < 문자열 > 프리픽스; 85 동안 ( 참 ) 86 { 87 GetPrefix (접두사); 88 COUT << CalPrefix (접두사) << ENDL << ENDL; 89 } 90 반환 0 ; 91 }