精易论坛

标题: 栈的高级应用之 - 算式运算 [打印本页]

作者: 福仔    时间: 2021-7-27 22:39
标题: 栈的高级应用之 - 算式运算
本帖最后由 福仔 于 2021-7-27 23:35 编辑



上一个帖子


主要两个知识点




  1. 将中缀表达式转换成后缀表达式

  2. 计算后缀表达式的结果



中缀表达式转换后缀表达式规则




  1. 所有数字直接输出

  2. 运算符优先级高于栈内的要入栈(或空栈), 否则从栈中弹出所有优先级更高或一样的运算符(或直到括号), 再将当前的入栈

  3. 所有左括号入栈


  4. 若是右括号, 栈不断出栈, 直到碰到左括号


    >  如果遇到操作符, 则从栈中弹出元素直到 栈顶操作符比当前操作符 优先级更低, 或者栈为空, 或者遇到左括号为止

    >  比如当前操作符是 '+', '-' 都要把栈内所有的运算符都弹出并输出, 因为栈顶不可能有比加减优先级更低的操作符

    >  再比如当前操作符是 '*', '/' 要把栈内所有的运算符都弹出并输出, 直到栈顶的运算符是 '+' 或者 '-'

    >  弹出完这些元素后, 才将遇到的操作符压入到栈中

    >  有一点需要注意, 只有在遇到 ')' 的情况下我们才弹出 '(' , 其他情况我们都不会弹出'('







计算后缀表达式




  1. 从左向右扫描, 遇到数字压栈

  2. 遇到操作符, 弹出栈顶的两个元素进行计算, 先弹出的元素在右边, 后弹出来的在左边

  3. 进行计算后, 将结果压栈

  4. 再往后扫描, 直到扫描结束, 输出栈顶元素, 即为最终结果






作者 福仔, QQ 121007124, 吹牛群 20752843

请不要拿了源码改了个版权就当是自己原创的

易语言这个圈子比较小, 在各大QQ群/论坛上很容易碰面

转载请注明出处, 标注原作者就是对原作者最基本的尊重







好评! 好评! 好评!
我都拉下脸来骗个好评了, 你忍心不给么

作者: 福仔    时间: 2021-7-27 22:52
本帖最后由 福仔 于 2021-7-27 23:23 编辑

中缀表达式 = 1 - 2 * ((60 - 30) + (-40 / 5) * (9 - 2) * ((5 / 3 + 7) / 3 * (99 / 4) * 2998 + 10 * 568 / 14) - -4 * 3 / (16 - 3 * 2))
后缀表达式 = 1  2  60  30  -  -40  5  /  9  2  -  *  5  3  /  7  +  3  /  99  4  /  *  2998  *  10  568  *  14  /  +  *  +  -4  3  *  16  3  2  *  -  /  -  *  -

可以自己按计算后缀表达式的规则手动计算一下这个后缀表达式

手动计算的每个步骤



1 2   30  -40 5   /   9   2   -      5   3   /   7   +   3   /   99  4   /      2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -8  9   2   -      5   3   /   7   +   3   /   99  4   /      2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -8  7      5   3   /   7   +   3   /   99  4   /      2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 5   3   /   7   +   3   /   99  4   /      2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 1   7   +   3   /   99  4   /   
   2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 8   3   /   99  4   /      2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 2   99  4   /   
   2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 2   24     2998       10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 48  2998   
   10  568    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 143904  10  568
   14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 143904  5680    14  /   +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 143904  405 +      +   -4  3      16  3   2      -   /   -      -

1 2   30  -56 144309     +   -4  3      16  3   2      -   /   -      -

1 2   30  -8081304    +   -4  3      16  3   2      -   /   -      -

1 2   -8081274    -4  3   
   16  3   2      -   /   -      -

1 2   -8081274    -12 16  3   2      -   /   -      -

1 2   -8081274    -12 16  6   -   /   -      -

1 2   -8081274    -12 10  /   -   
   -

1 2   -8081274    -1  -      -

1 2   -8081273   
   -

1 -16162546   -

16162547




作者: byjimo    时间: 2021-7-27 22:58
我认为是等于
1-2*((60-30)+((-40)/5)*(9-2)*((5/3+7)/3*(99/4)*2998+10*568/14)-(-4)*3/(16-3*2))
=24053362.599815313594459696
作者: byjimo    时间: 2021-7-27 23:03
1-2*((60-30)+((-40)/5)*(9-2)*((5/3+7)/3*(99/4)*2998+10*568/14)-(-4)*3/(16-3*2))
=24053362.599815313594459696
1-2*(60-30-40/5*(9-2)*((5/3+7)/3*99/4*2998+10*568/14)+4*3/(16-3*2))
=24053362.599815313594291808
作者: 追忆帝    时间: 2021-7-27 23:10
光看就头晕了,别说什么计算了
作者: 917622157    时间: 2021-7-27 23:22
支持开源 感谢分享!
作者: 谁的坏叔叔    时间: 2021-7-28 00:09
你好久没更新了    终于更新了
作者: 晚点相遇    时间: 2021-7-28 00:14
感谢分享
作者: a3780586510    时间: 2021-7-28 04:33
看看看看看看看看
作者: orjg    时间: 2021-7-28 08:39
支持开源~!感谢分享
作者: wjswzj0    时间: 2021-7-28 08:59
支持开源~!感谢分享
作者: jiang910615    时间: 2021-7-28 09:03
学习学习
作者: 冰棍好烫啊    时间: 2021-7-28 09:20
        感谢分享,很给力!~  
作者: pyms    时间: 2021-7-28 09:24
感谢分享,很给力!~
作者: 酷易自绘    时间: 2021-7-28 10:09
RE: 栈的高级应用之 - 算式运算 [修改]
作者: 网络注册会员    时间: 2021-7-28 12:15
支持一下
作者: 深圳梦    时间: 2021-7-28 17:29
感谢分享,很给力!~
作者: sinewtec    时间: 2021-7-29 09:23
感谢分享!!!!!!!
作者: yxl2008    时间: 2021-7-29 11:10
感谢分享,下载学习!!!
作者: 登峰望岳    时间: 2021-7-30 17:36
支持开源~!感谢分享
作者: 土豆拌螃蟹    时间: 2021-7-31 19:04
#在这里好评! 好评! 好评!快速回复#
作者: 日勿日勿    时间: 2021-8-3 15:31
点赞 不错哦!
作者: 福仔    时间: 2021-8-3 16:52
福仔 发表于 2021-7-27 22:52
中缀表达式 = 1 - 2 * ((60 - 30) + (-40 / 5) * (9 - 2) * ((5 / 3 + 7) / 3 * (99 / 4) * 2998 + 10 * 56 ...

a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

>> << % 优先级和 * / 一样高
& | ^ 优先级比 + - 低
~ 优先级最高, 因为只有一个操作数

优先级总结(从低到高):
0: & | ^
1: + -
2: * / % << >>
3: ~


作者: f100long    时间: 2021-8-3 17:42
什么是栈,好高深啊
作者: 尐觅风    时间: 2021-8-3 18:35
看下!!!!!!!!!
作者: 2161045897    时间: 2021-8-5 17:55
支持开源~!感谢分享
作者: mainshentong    时间: 2021-8-7 21:19
来看看看看
作者: nuan1989    时间: 2021-8-8 12:29
挺厉害的, 大部分易都写不出了.我也不行.
作者: BIG牛肉面    时间: 2021-8-11 03:40
谢谢分享来看看
作者: 王东林    时间: 2021-8-20 16:25
感谢大佬分享
作者: 阿Q3    时间: 2021-8-21 00:41
可以,学习一下。谢谢大佬的分享
作者: starfee    时间: 2021-8-21 16:00
这个领域对我来说太遥远,膜拜楼主!
作者: Ezhacker    时间: 2021-8-22 00:06
学习学习
作者: 727weilai    时间: 2021-8-25 02:58
看下!!!!!!!!!

作者: syl199312    时间: 2021-8-26 20:39


作者: 归去来兮辞    时间: 2021-8-29 21:32
系列软件商品及通信录导入模板.rar
作者: biaoge1368    时间: 2021-8-29 21:59
好评是必须的!!!
作者: 土豆要不    时间: 2021-8-31 10:00
标题: ++
6666666666666666666
作者: gorkys    时间: 2021-8-31 21:04
支持开源~!感谢分享
作者: 懿Yi    时间: 2021-9-2 15:17
支持开源~!感谢分享
作者: Mr.huang    时间: 2021-9-5 00:48
感谢发布原创作品,精易因你更精彩!
作者: 王小鑫xxx    时间: 2021-9-6 08:17
感谢分享,很扭逼8
作者: kangzunjun    时间: 2021-9-6 09:39
这个用js的话,一句代码就解决了!
作者: c6159432    时间: 2021-9-11 11:07
虽然我看不懂,但是我还是要说一句牛逼
作者: quary888    时间: 2021-9-11 21:51
谢谢楼主分享!!!
好人一生平安!!!

作者: 没落的残阳    时间: 2021-9-13 19:46
好评! 好评! 好评!
作者: 土豆要不    时间: 2021-9-17 10:00
标题: ++
6666666666666666666
作者: cmcc11    时间: 2021-9-20 19:32
        感谢发布原创作品,精易因你更精彩
作者: 已注销663686    时间: 2021-9-20 19:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: zxzaixian    时间: 2021-9-23 14:37
感谢发布原创作品,精易因你更精彩
作者: sss10070    时间: 2021-9-27 20:51
感谢分享,很扭逼8
作者: cyberhalley    时间: 2021-9-27 22:21

感谢发布原创作品
作者: a156    时间: 2021-10-6 18:13
挖地道多多多多多多多多多多多多多多多多多多多多
作者: viaboot    时间: 2021-10-8 11:27
谢谢谢谢谢谢谢谢谢谢
作者: 土豆要不    时间: 2021-10-9 10:00
标题: ++
6666666666666666666
作者: 邪恶萝卜    时间: 2021-10-9 15:46
支持大佬!!!
作者: buluo987    时间: 2021-10-15 16:05
小白  也就看看
作者: lm88818    时间: 2021-10-17 01:18
支持开源~!感谢分享!!!
作者: 1437709426    时间: 2021-12-12 21:32
标注原作者就是对原作者最基本的尊重
作者: denz2008    时间: 2021-12-13 15:19
支持开源~!感谢分享!!!
作者: uulive    时间: 2021-12-26 02:28
学习了
作者: 美丽星空    时间: 2022-1-7 11:09
大佬玩法,,,不是没人看,,是压根卜明白
作者: zhifu3158    时间: 2022-1-17 13:50
        感谢发布原创作品,精易因你更精彩!
作者: lm88818    时间: 2022-1-18 10:17
支持开源~!感谢分享
作者: 倾慕风月    时间: 2022-1-19 23:02
感谢分享
作者: 土豆要不    时间: 2022-2-9 10:00
标题: ++
6666666666666666666
作者: lydxp    时间: 2022-2-17 07:39
谢谢分享。。。
作者: qq309    时间: 2022-2-18 11:50
多多回复,多多赞币
作者: 冯古屋    时间: 2022-2-28 20:28
这个似乎有点意思!
作者: qwqwaz    时间: 2022-3-9 15:03

6666666666666666666
作者: 新天地    时间: 2022-3-24 10:26
支持开源~!感谢分享
作者: AYM    时间: 2022-3-25 21:47
支持开源~!感谢分享
作者: AYM    时间: 2022-3-25 21:48
支持开源~!感谢分享
作者: AYM    时间: 2022-3-26 00:09
支持开源~!感谢分享
作者: pjm123    时间: 2022-4-16 09:46
谢谢分享
作者: Esma001    时间: 2022-4-16 17:59

谢谢分享。。。
作者: 努力的码农    时间: 2022-6-10 11:13
牛逼大了。
作者: cfvgbhnj    时间: 2022-6-22 11:17
感谢发布原创作品,精易因你更精彩!
作者: 明天自然醒    时间: 2022-11-16 10:15
为啥算式还得加空格?


1-2出错。





作者: wyd168    时间: 2024-2-11 11:36
开源精神必须支持~
作者: yuzhong3    时间: 2025-6-24 00:32
111111111111111111111111




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4