一道让我耿耿于怀的面试题

已经工作将近两个月了,但是,时不时还会想起原来参加的一次面试。虽然没能有机会加入到那个公司,经历下那样的面试,也是一种全新的体验吧。我不会放弃,我会继续努力,我相信,早晚有一天,我会有能力进入到那家公司的。

     闲话少说,直接进入正题。我学过数据结构,也学过编译原理,数据结构倒是能学明白,编译原理从头到尾都是稀里糊涂的。但是,那次面试,偏偏就问到了类似的题目。如果没有学过编译原理,可能我能回答得更快些,正如范伟老师说的,学得太杂了。题目其实不难,用数据结构就能解决,我用编译原理的理论来解决,感觉是把自己给绕进去了。

题目:给一个表达式,计算其结果,写出完整的代码。

最近看数据结构的资料,发现用数据结构就能够解决,而且思路清晰,实现起来也没有太大的难度。首先将中缀表达式转换为后缀表达式,再进行计算就完成了,其中用到了栈。

首先,将中缀表达式转换为后缀表达式。

   对整个表达式遍历,如果是数字,直接输出,如果是运算符,就要进行一些特殊的处理了。如果当前栈为空,则将该运算符直接入栈;如果是‘(’,入栈;如果是‘)’,依次出栈输出,直到出现‘(’,并将其出栈;如果未出现上述情况,判断当前运算符与栈顶运算符的优先级。如果优先级高于栈顶元素,进栈,否则,依次出栈,输出,直到栈顶符号的优先级低于当前算符,然后此算符进栈。当表达式遍历结束后,将栈中元素依次输出,则组成了我们需要的后缀表达式。

其次,计算后缀表达式的结果

  转换为后缀表达式之后,相对而言,计算就会简单很多。遍历后缀表达式,如果是操作数入栈,如果是符号,将栈顶的两个元素依次出栈,计算结果。需要注意的是,对于不符号交换律的运算,如减法和除法,一定要处理好两个操作数的位置,要不然计算结果肯定不正确。计算完之后,将结果入栈。如此进行下去,当遍历完后缀表达式时,栈中应该只剩一个元素,就是我们要得到的结果。

以上处理都是在输入无误的情况下进行的。

  看来东西学得多没用,关键是能够融会贯通,就像是张无忌练各种武功一样,要能够灵活运用,才不至于走火入魔。好吧,我承认,好久没看过数据结构和算法,感觉挺陌生的了。所以,继续学习。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值