zoukankan      html  css  js  c++  java
  • 使用栈将中缀表达式转换为后缀表达式

     1 void inToPostfix()
     2 {
     3 stack<char> s;
     4 char token;
     5 cin>> token;
     6 while (token != ’=’)
     7 {
     8 if (token >= ’a’ && token <= ’z’)
     9 cout<<token<<" ";
    10 else
    11 switch (token)
    12 {
    13 case ’)’ : while(!s.empty() && s.top() != ’(’)
    14 { cout<<s.top()<<" "; s.pop();}
    15 s.pop(); break;
    16 case ’(’ : s.push(token); break;
    17 case ’^’ : while(!s.empty() && !(s.top()== ’^’ ||
    18 s.top() == ’(’))
    19 {cout<<s.top(); s.pop();}
    20 s.push(token); break;
    21 case ’*’ :
    22 case ’/’ : while(!s.empty() && s.top() != ’+23 && s.top() != ‘-‘ && s.top() != ‘(‘)
    24 {cout<<s.top(); s.pop();}
    25 s.push(token); break;
    26 case ‘+’ :
    27 case ‘-‘ : while(!s.empty() && s.top() != ‘(‘ )
    28 {cout<<s.top()<<“ ”; s.pop();}
    29 s.push(token); break;
    30 }
    31 cin>> token;
    32 }
    33 while (!s.empty())
    34 {cout<<s.top()<<“ ” ; s.pop();}
    35 cout<<" = 
    ";
    36 }

    还有将后缀转为中缀:

     1 string postToInfix()
     2 {
     3 stack<string> s;
     4 string token;
     5 string a, b;
     6 cin>>token;
     7 while (token[0] != ’=’)
     8 {
     9 if (token[0] >= ’a’ && token[0] <= ’z’)
    10 s.push(token);
    11 else
    12 switch (token[0])
    13 {
    14 case ’+’ : a = s.top(); s.pop() ; b = s.top(); s.pop();
    15 s.push("("+ a+" + " + b+")"); break;
    16 case ’-’ : a = s.top(); s.pop() ; b = s.top(); s.pop();
    17 s.push("("+a+" - "+ b+")"); break;
    18 case ’*’ : a = s.top(); s.pop() ; b = s.top(); s.pop();
    19 s.push("("+a+" * "+ b+")"); break;
    20 case ’/’ : a = s.top(); s.pop() ; b = s.top(); s.pop();
    21 s.push("("+a+" / " + b+")"); break;
    22 case ’^’ : a = s.top(); s.pop() ; b = s.top(); s.pop();
    23 s.push("("+a+" ^ " + b+")"); break;
    24 }
    25 cin>> token;
    26 }
    27 return s.top();
    28 }


    栈的其他应用: 计算后缀表达式的值

     1 double evalPostFix()
     2 {
     3     stack<double> s;
     4     string token;
     5     double a, b, result;
     6     cin >> token;
     7     while (token[0] != '=')
     8     {
     9         result = atof(token.c_str());
    10         if (result != 0.0)    
    11             s.push(result);
    12         else if (token == "0.0")
    13             s.push(result);
    14         else 
    15             switch (token[0])
    16         {
    17             case'+' :
    18                 a = s.top(); s.pop();
    19                 b = s.top(); s.pop();
    20                 s.push(a + b);
    21                 break;
    22             case'-':
    23                 a = s.top(); s.pop();
    24                 b = s.top(); s.pop();
    25                 s.push(a - b);
    26                 break;
    27             case'*':
    28                 a = s.top(); s.pop();
    29                 b = s.top(); s.pop();
    30                 s.push(a * b);
    31                 break;
    32             case'/':
    33                 a = s.top(); s.pop();
    34                 b = s.top(); s.pop();
    35                 s.push(a / b);
    36                 break;
    37             case'^':
    38                 a = s.top(); s.pop();
    39                 b = s.top(); s.pop();
    40                 s.push(exp(a*log(b)));
    41                 break;
    42         }
    43         cin >> token;
    44     }
    45     return s.top();
    46 }
  • 相关阅读:
    Vsftpd 3.0.2 正式版发布
    Putdb WebBuilder 6.5 正式版本发布
    SoaBox 1.1.6 GA 发布,SOA 模拟环境
    pynag 0.4.6 发布,Nagios配置和插件管理
    Percona Playback 0.4,MySQL 负荷回放工具
    xombrero 1.3.1 发布,微型 Web 浏览器
    Hypertable 0.9.6.4 发布,分布式数据库
    libmemcached 1.0.11 发布
    CryptoHeaven 3.7 发布,安全邮件解决方案
    Android Activity生命周期
  • 原文地址:https://www.cnblogs.com/ll-10/p/5391589.html
Copyright © 2011-2022 走看看