后缀表达式求值

该博客详细介绍了如何使用栈处理后缀表达式的计算。通过读取一行后缀表达式,利用栈的后进先出特性,依次将数字入栈,并在遇到运算符时弹出两个数进行计算,将结果重新入栈。算法实现了从字符串到计算结果的转换,时间复杂度为O(N),空间复杂度同样为O(N)。博客强调了栈在解决此类问题中的核心作用。
摘要由CSDN通过智能技术生成

一、题目

输入一行表示后缀表达式,数与数之间一定有空格隔开(可能不只一个空格),最后输入@表示输入结束

二、分析
后缀表达式,特点为运算符在两个操作数后,所可以用栈来实现。
用一个栈来存储数,遇到运算符则弹出两个数来进行计算,然后将结果入栈。
三、算法实现
(主要代码)
数据结构:栈。这里我用的是一个整型数组:a[1000].

    char s[1000];
    int i,x,f,e,d,tag,j=0,n;
    int a[1000]={0,};
    gets(s);
    n=strlen(s);//读取时直接用字符串数组读取。
    for(i=0; s[i];)
    {
        tag=0,x=0;//关键步骤:包含多位数的处理方式。
         while(i<n&&'0'<=s[i]&&s[i]<='9')
        {
            x=x*10,x=x+s[i]-'0',i++,tag=1;
        }
        if(tag)//入栈
            a[j++]=x;
        else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')//运算
        {
            d=a[--j];
            e=a[--j];
            switch(s[i])
            {
            case '+':
                f=e+d;
                break;
            case '-':
                f=e-d;
                break;
            case '*':
                f=e*d;
                break;
            case '/':
                f=e/d;
                break;
            }
            a[j++]=f;
            i++;
        }
        else
            i++;
    }
    printf("%d",a[0]);     
    

四、算法分析
算法分析:其实就是遍历了字符串数组一趟,所以大致的时间复杂度为O(N)。
空间复杂度为O(N)。此题灵活运用了栈的“后进先出”的特点。很有代表意义。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值