中缀表达式转换为后缀表达式

【问题描述】
输入一个中缀表达式,表达式中有+、-、*、/四种运算以及(、),表达式中的其他符号为大写的字母。实现一个算法,得到相应的后缀表达式。

【输入形式】
一个式子的中缀表达式,以#结束

【输出形式】
相应的后缀表达式

【样例输入】

A*(B-C)/D+E#
【样例输出】

ABC-*D/E+

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
    char stack[100];
    int i=0,top=0,base=0;
    char a;int l;
    char sin[100];
    scanf("%s",sin);
    l=strlen(sin)-1;
    int pre(char c){//给加减乘除赋予优先级分数
        if(c=='*'||c=='/'){
            return 3;
        }
        if(c=='+'||c=='-'){
            return 2;
        }
        if(c=='('){
            return 1;
        }
    }
    void push(int x){//入栈操作
        stack[top++]=x;
    }
    char pop(){//出栈操作
        char x = stack[--top];
        return x;
    }
    char e;
    while(i<l){
        if(sin[i]>='A'&&sin[i]<='Z'){//如果为操作数,直接输出
            printf("%c",sin[i]);
        }else if(sin[i]=='('){//左括号压入堆栈
            push(sin[i]);
        }else if(sin[i]==')'){//遇到右括号,运算符号出栈
            e=pop();
            while(e!='('){//直到遇到左括号,停止出栈
                printf("%c",e);
                e=pop();
            }
        }else{//如果为运算符,对比优先级,出栈,入栈
            while(base<top&&pre(stack[top-1])>=pre(sin[i])){
                printf("%c",pop());
            }
            push(sin[i]);
        }
        i++;
    }
    while(base<top){
        printf("%c",pop());
    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值