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

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

 

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

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

示例输出

ab*cde/-f*+

提示

 

来源

 

示例程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int f(char ch, char sh)
{
    if(sh=='(') return 1;
        if( (ch=='*' || ch=='/' || ch=='%')&&( sh=='+' || sh=='-')  )
            return 1;
        else
            return -1;
    }
    int main()
    {
        int i = 0 , top = -1 ;
        char exp[1000] , str[1000] , ch ;
        while(scanf("%c", &ch) && ch != '#')
        {
            if(ch >= 'a' && ch <='z')
                exp[i++] = ch ;
            else if(ch=='(')
                str[++top] = ch ;
            else if(ch==')')
            {
                while(top!=-1)
                {
                    exp[i++] = str[top];
                    top--;
                    if(str[top]=='(')
                    {
                        top--;
                        break;
                    }
                }
            }
            else
            {
                if(top == -1 || f(ch,str[top]) > 0 )
                    str[++top] = ch ;
                else
                {
                    while(top >=0 && f(ch,str[top]) < 0  )
                    {
                        exp[i++] = str[top--];
                    }
                    str[++top] = ch ;
                }
            }
        }
        while(top != -1)
        {
            exp[i++] = str[top--];
        }
        exp[i] = '\0';
        printf("%s\n", exp);
        return 0;
    }

 

posted @ 2014-11-25 16:43  夏迩  阅读(182)  评论(0)    收藏  举报