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

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

#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

 

转载于:https://www.cnblogs.com/acm-jing/p/4393756.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值