접두사 식을 계산

    앞서 우리는 논의 후위 식을 수행했다. 피연산자가 발생하면 후위 식 연산 처리를 순차적으로 전체 포스트 픽스를 검색하는 제 오퍼랜드 스택으로 설정된 후 누름 조작의 수는 해당 팝업에서 연산자 오퍼랜드 스택 발생하면 동작 및 누름 동작의 결과 피연산자. 전체가 후위를 스캔 할 때, 오퍼랜드 스택은 단지 하나의 엘리먼트이어야 요소는 계산 결과 후위 식의 값이다.

         후위 표현 :

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 }

 

추천

출처www.cnblogs.com/xiaolitongxueyaoshangjin/p/12350394.html