数据结构实验之栈二:一般算术表达式转换成后缀式

来源:互联网 发布:java生成两个构造函数 编辑:程序博客网 时间:2024/05/22 21:10

数据结构实验之栈二:一般算术表达式转换成后缀式

Time Limit: 1000MS Memory limit: 65536K

题目描述

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

输入

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

输出

输出该表达式转换所得到的后缀式。

示例输入

a*b+(c-d/e)*f#

示例输出

ab*cde/-f*+

提示

 

来源

 

示例程序

#include <iostream>#include <cstdlib>#include <cstdio>#include <stack>#define stacksize 1000001using namespace std;int ch(char c){    if(c=='+' || c=='-')        return 1;    if(c=='*' || c=='/')        return 2;    if(c=='(')        return 3;    if(c==')')        return 4;    return 0;}int main(){    char c;    stack<char>ss;        while(~scanf("%c",&c) && c!='#')    {        if(c>='a' &&c<='z')            printf("%c",c);        else        {            if(ss.empty())            {                ss.push(c);            }                        else if(ch(c)>ch(ss.top()))            {                if(ch(c) == 4)                {                    while(ss.top()!= '(')                    {                        printf("%c",ss.top());                        ss.pop();                    }                    ss.pop();                }                else                {                    ss.push(c);                }            }                        else            {                if(ss.top() != '(')                {                    printf("%c",ss.top());                    ss.pop();                    ss.push(c);                }                else                {                    ss.push(c);                }            }        }    }        while(!ss.empty())    {        printf("%c",ss.top());        ss.pop();    }    printf("\n");    return 0;}


 
0 0
原创粉丝点击