大话数据结构8之栈和队列2

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

  后缀(逆波兰)表示法定义:不需要括号的后缀表达式。例:9+(3-1)*3+10/2,后缀表达式为9 3 1 - 3 * + 10 2 / +,所有的符号都是在要运算的数字后面出现

  后缀表达式计算结果:还是上例

  <1>初始化一个空栈,此栈用于对要运算的数字进出使用;

  <2>后缀表达式中的前三个都是数字,所以把运算符前面的数值依次进栈:9、3、1,后面接着符号“+”;

  <3>接下来是"-",所以将栈中的1出栈作为减数,3出栈作为被减数即运算3-1得到2,再将2进栈;

  <4>接着是数字3进栈;

  <5>后面的符号是*,就意味着栈中的3和2出栈,即2*3得到6,再将6进栈;

  <6>接着又有一个"+",所以6和9出栈,6和9相加得到15,15再进栈;

  <7>紧接着的是10与2两个数字进栈;

  <8>接着是符号/2和10出栈,10除以2得到5,再将5进栈;

  <9>最后一个符号是+,所以15和5出栈并相加得到20,将20进栈;

  <10>结果是当20出栈,栈变空。

  中缀表达式转后缀表达式:

  中缀表达式就是我正常用到的标准四则运算表达式,那么我们该如何实现从中缀转变为后缀的转化。

       例:将中缀表达式9+(3-1)*3+10/2转化成后缀表达式9 3 1 - 3 * + 10 2 / +

    <1>初始化一个空栈,用来对符号进出栈使用;

    <2>第一个字符是数字9,输出9,后面是符号+;

    <3>第三个字符是符号(,但是是左括号,还没有配对,所以进栈;

    <4>第四个字符是数字3,输出3,总表达式9 3,接着是-,进栈;

    <5>接着是数字1,输出,总表达式为9 3 1,接着后面的符号是),因为可以同此前的(相匹配,所以()依次出栈,并输出,直到(也出栈为止,而在(上方的只有-,所以输出-,则总输出表达式是9 3 1 -;

    <6>接着是数字3,输出总表达式为9 3 1 - 3,紧接着是符号*,因为此时栈顶符号为+,优先级低于*,因而不会输出,*进栈;

    <7>之后是符号+,此时栈顶元素*的优先级高于+,则该元素输出再将+进栈,总输出表达式是:9 3 1 - 3 * +;

    <8>紧接着是数字10,输出,总表达式变为9 3 1 - 3 * + 10,后面是符号/,符号/进栈;

    <9>最后的数字是2,输出,总表达式是9 3 1 - 3 * + 10 2;

    <10>因为已经到达最后,所以将栈中符号全部出栈并输出,所以最终输出的后缀表达式结果为9 3 1 - 3 * + 10 2 / +。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值