栈的应用——四则运算表达式求值

设A和B为某个双目运算符‘#’的两个操作数,则有下列定义:

#AB

前缀表达式

A#B

中缀表达式

AB#

后缀表达式

前缀表达式

  • 是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面。
  • 为纪念其发明者波兰数学家Jan Lukasiewicz,前缀表达式也称为“波兰式”。
  • 例如:1-(2+3) 的前缀表达式为- 1 + 2 3

后缀表达式(逆波兰式)

将运算符写在后面,操作数写在前面

例如:求(a+b)*c-(a+b)/e的后缀表达式:

  • (a+b)*c-(a+b)/e
  • →((a+b)*c)((a+b)/e)-
  • →((a+b)c*)((a+b)e/)-
  • →(ab+c*)(ab+e/)-
  • →ab+c*ab+e/-

例如:求9+(3-1)*3+10/2的后缀表达式:

原则:将最后计算的运算符放在后面

 

中缀表达式转后缀表达式

  • 算法思路:
  • (1)依次扫描中缀表达式
  • (2)遇到数字就输出
  • (3)遇到运算符,有以下几种情况  
      • a: 栈空直接入栈  
      • b: 遇到左括号直接入栈  
      • c: 遇到右括号则将栈顶的运算符出栈并输出,直到左括号出栈为止,但左括号不作为输出
      • d: 遇到运算符优先级高于栈顶运算符优先级,则入栈  
      • e: 遇到运算符优先级低于或等于栈顶运算符优先级,则将栈顶运算符出栈并输出,直到其优先级高于栈顶运算符优先级时停止(或栈为空),最后再将其入栈
  • (4)若中缀表达式中的各对象处理完毕,则把栈中存留的运算符依次弹栈输出。

注:优先级关系   1.先乘除,后加减  2.从左算到右  3.先括号内,后括号外

全部代码函数

SqStack* InitStack();//初始化栈

SElemType GetTop(SqStack* s);//若栈不空,获取S的栈顶元素

Status Push(SqStack* s, SElemType e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值