码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构实验之栈三:后缀式求值

时间:2014-09-24 11:08:36      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   color   io   os   java   ar   for   

数据结构实验之栈三:后缀式求值

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。

输入

输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。

输出

求该后缀式所对应的算术表达式的值,并输出之。

示例输入

59*684/-3*+#

示例输出

57

提示

基本操作数都是一位正整数!

来源

 

示例程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
int main()
{
    stack<int >q;
    char str[110];
    scanf("%s",str);
    for(int i=0;str[i]!='#';i++)
    {
        if(str[i]>='0'&&str[i]<='9')//这是ASCII码值的大小,要成为正常的大小,要减去48;坑了好久
        q.push(str[i]-48);
        else//以下就是反复的入栈出栈,相当于把一般式化为后缀式的反向应用。
        {
            if(str[i]=='+')
            {
                int a=q.top();
                q.pop();
                int b=q.top();
                q.pop();
                int c=a+b;
                q.push(c);
            }
            if(str[i]=='-')
            {
                int a=q.top();
                q.pop();
                int b=q.top();
                q.pop();
                int c=b-a;
                q.push(c);
            }
            if(str[i]=='*')
            {
                int a=q.top();
                q.pop();
                int b=q.top();
                q.pop();
                int c=a*b;
                q.push(c);
            }
            if(str[i]=='/')
            {
                int a=q.top();
                q.pop();
                int b=q.top();
                q.pop();
                int c=b/a;
                q.push(c);
            }
        }
    }
    printf("%d\n",q.top());//最后剩下的这个元素就是最终结果。
    return 0;
}




数据结构实验之栈三:后缀式求值

标签:des   style   http   color   io   os   java   ar   for   

原文地址:http://blog.csdn.net/u013486414/article/details/39519459

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!