本文深入探讨了后缀表达式的概念及其计算方法,通过逆波兰表示法避免了传统中缀表达式中括号和优先级带来的复杂性。文章提供了一个使用栈数据结构实现后缀表达式求值的C++代码示例,详细解释了如何通过遍历输入字符,运用switch-case语句处理加减乘除运算,并最终输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们学了栈,栈是一先进后出,后进先出:

老师讲了一道例题,后缀表达式:

后缀表示法也叫逆波兰表示法(前缀就是波兰表示法),由于所有的操作符都在操作数的后面,所以被称为后缀表示法。

中缀表示法的操作符在操作数之间,也是最符合人的逻辑。前缀表示法的操作符在操作数之前,它和后缀表示法一样,都是为了方便计算机计算,因为在后缀或前缀中没有括号,也不存在优先级处理的问题,直接利用栈进行计算。

思路:现将最开始输入的2个数进行后面符号的运算,然后在和后面的常数进行常数后面的符号的运算。。。。。。最后输出数组的最后一项

代码如下(有注释):

#include <bits/stdc++.h>
using namespace std;
char c[1005];
int a[1005];
int main()
{
    int m;
    gets(c);//输入 
    int top=0;// top表示当前最高值 
    for(int i=0;i<strlen(c);i++){
        switch(c[i]){
            case ' ':break;//如果没有数,跳出 
            case '+':m=a[top-1]+a[top];top--;a[top]=m;break;//如果是加号,就将两数相加,top返回上一层,更新a[top]的值为a+b 
            case '-':m=a[top-1]-a[top];top--;a[top]=m;break;//如上 
            case '*':m=a[top-1]*a[top];top--;a[top]=m;break;//如上 
            case '/':m=a[top-1]/a[top];top--;a[top]=m;break;//如上 
            default a[++top]=c[i]-48;//如果是常数项,top加一层,且a[top]更新为c[i]的int值 
        }
    }
    cout<<a[top];//输出 
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值