关于中缀表达式转后缀表达式

关于中缀表达式转后缀表达式

关于中缀表达式转后缀表达式,这个需要利用栈来实现


#include<bits/stdc++.h>
using namespace std ;

typedef struct Bi_Node{
    int data ;
    Bi_Node *lchild , *rchild ;
}Bi_Node, * Bi_Tree ;

stack<char>s ;
queue<char >q ;
void change(string str ){
    for(int i = 0 ;i< str.length() ;i ++ ){
        if(str[i] >= 'a' && str[i] <= 'z'){
            q.push(str[i]);
        }else if(str[i]=='('){//直接入栈
            s.push(str[i]);
        }else if(str[i] == '+' || str[i] == '-'){
            while (!s.empty()&&s.top()!= '('){//栈顶为*/,将栈内元素出栈
                q.push(s.top());
                s.pop();
            }
            s.push(str[i]);//再将当前的入栈
        }else if(str[i] =='*' || str[i] == '/'){
            if(s.top()== '+' || s.top()== '-' || s.top()=='(' || s.empty()){//栈顶优先级低
                s.push(str[i]);
            }else {//先出栈再入栈
                q.push(s.top());
                s.pop();
                s.push(str[i]);
            }
        }else {//为),出栈,直到(
            while (s.top()!='('&&!s.empty()){
                q.push(s.top());
                s.pop() ;
            }
            if(s.top() == ')'){//()是不入队的
                s.pop() ;
            }
        }
    }
    while (!s.empty()){//栈中可能有遗留
        q.push(s.top());
        s.pop() ;
    }
}


int main(){
    string str ;
    cout << "请输入字符串(为包含字母、+、-、*、/、左右括号):"<<endl;
    getline(cin,str);//从屏幕输入一行字符串存入str中;
    change(str);
    cout << "后缀表达式为:"<<endl;
    while(q.size()>1){
        cout << q.front() << " ";
        q.pop();
    }
    cout << q.front() << endl;
    
    system("pause");
    return 0;
    
    return 0 ;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值