数据结构栈实现四则运算

本文介绍了如何利用栈来处理中缀表达式,将其转换为后缀表达式以方便计算机运算。通过遍历输入字符串,遇到数字直接输出,遇到运算符则与栈顶元素比较优先级,根据优先级决定压栈或弹栈。遇到右括号,会连续输出直到匹配到左括号。在计算后缀表达式时,遇数字压栈,遇符号则弹出栈顶两个元素进行计算,结果再入栈。
摘要由CSDN通过智能技术生成
例如,计算9+(3-1)*3+8/2

思路:通过栈来实现上述元素,我们一般称上述表达式为中缀表达式,我们首先要将其转换为后缀表达式,因为中缀表达式不利于计算机运算。

上代码:
算法思路:
对字符串中的内容,遇到数字就输出,遇到符号则与栈顶元素比较优先级,若低,则将栈顶元素弹栈,若高,则压栈。若为右括号,则连续输出,直到遇到左括号,这输出的就是后缀表达式
其中isp()和icp()这两个函数是对于优先级的规定,在下一段代码中有它们的定义

void postfix(){
    stack<char> s;
    char y;
   // s.makeEmpty();
    s.push('#');
    char ch[20]="9+(3-1)*3+8/2"; 
    for(int i=0;i<13;i++){
        if(isdigit(ch[i]))
            cout<<ch[i];
        else if(ch[i]==')'){
          //  cout<<ch[i]<<endl;
            while(!(s.empty())&&(y=s.top())!='('){
                cout<<y;
                s.pop();
                }
            if(!s.empty())
                s.pop();
        }
        else{
            while(!s.empty()&&isp(y=s.top())>icp(ch[i])){
                cout<<y;
                s.pop();
            }
            s.push(ch[i]);
        }
    }
    while(!s.empt
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值