将中缀表达式转换为后缀表达式

主要靠的是栈内栈外优先级的设置:

复制代码
#include"iostream"
#include"stdio.h"
#include"stack"
#include"algorithm"
#include"string"
#include"ctype.h"
using namespace std;
struct node
{
    char ch;
    int isp,icp;
};
char a[100];
void f(node &d)
{
    switch(d.ch){
        case '(':d.isp=1;d.icp=6;break;
        case '*':case '/':case '%':
            d.isp=5;d.icp=4;break;
        case '+':case '-':
            d.isp=3;d.icp=2;break;
        case ')':d.isp=6;d.icp=1;break;
        case '#':d.isp=d.icp=0;break;
    default:break;
    }
}
int main()
{
    node b,t;
    stack<node>s;
    node c;c.ch='#';
    f(c);
    s.push(c);
    cin>>b.ch;
    while(!s.empty())
    {
        if(isdigit(b.ch)) {cout<<b.ch;cin>>b.ch;}
        else
        {
            f(b);
            t=s.top();
            if(b.icp>t.isp) {s.push(b);cin>>b.ch;}
            else if(b.icp<t.isp) {cout<<t.ch;s.pop();}
            else {s.pop();if(t.ch=='(') cin>>b.ch;}
        }
    }
    return 0;
}
View Code
复制代码

 

posted @   Run_For_Love  阅读(252)  评论(0编辑  收藏  举报
编辑推荐:
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
阅读排行:
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
点击右上角即可分享
微信分享提示