从中序表达式到逆序表达式(逆波兰式)(四则运算表达式求值)

本文介绍了如何将中序表达式转换为逆波兰式(后缀表达式),并讨论了逆波兰式的优点,即运算顺序清晰,便于计算机处理。文中提供了一份实现该转换的代码示例,涉及两个栈——符号栈和数字栈。通过输入中序表达式,例如9+(3-1)*3+10/2#,可以进行计算。
摘要由CSDN通过智能技术生成

将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。(逆波兰式不需要使用括号)
本份代码出自:http://wenku.baidu.com/view/23a5b73031126edb6f1a10aa.html
本份代码需要两个栈。一个是符号栈,一个是数字栈。
输入中序表达式如9+(3-1)*3+10/2#

这里写图片描述

这里写图片描述
计算过程
这里写图片描述

#include<stdio.h>
#include<math.h>
#define max 100
char ex[max];        /*存储后序表达式*/

/*函数功能:将中序表达式转化为后序表达式*/
void trans() {
    char str[max];   /*表达式字符串*/
    char stack[max]; /*运算符栈*/
    char ch;         /*当前字符*/
    int sum, i, j, t, top = 0; /*sum用来统计字符串的长度*/
                               /*t是数字栈栈顶指针*/
                               /*top是数字栈栈顶指针*/
    printf("*****************************************\n");
    printf("*输入一个求值的表达式,以#结束。*\n");
    printf("******************************************\n");
    printf("算数表达式:");

    i = 0;
    /*这个循环语句,获取一个用户输入的合法的表达式*/
    do {
        i++;
        scanf(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值