前缀、中缀、后缀表达式求解及转换总结

一、求解类问题有如下几种形式:

  1. 前缀求解:递归

  2. 中缀求解:双栈

  3. 后缀求解:递归

  三类表达式求解问题,其中中缀最复杂需要维护两个栈,同时也可以理解为什么要构造出前缀与后缀表达式了,因为前后两种表达式都利用了计算机求解逻辑,去除了括号而天然的保留了求解顺序,更符合计算机用栈求解的过程,实现起来也更容易。

 

二、转换类问题有如下几种:

  1. 前缀转中缀:递归

  2. 前缀转后缀:树

  3. 中缀转前缀:栈

  4. 中缀转后缀:栈

  5. 后缀转前缀:树

  6. 后缀转中缀:递归

  中缀转其他两种,都可以用补全括号法来实现,补全括号法可以用递归实现

  1. 遍历字符串,找到未被括号包括的最高优先级操作符,没有则结束,有则记录左右括号插入点。

  2. 插入左右括号,继续循环遍历。

  3. 全部插入后,移动操作符。

  4. 去除括号。

  所有的转换,都可以用遍历树的方法来实现,表达式(4 + 2) * (3 + 6)的树结构如下图:

  -----------------*------------------

  ------------/-----------\-----------

  --------+----------------+---------

  ------/----\------------/-----\------

  ----4-------2---------3-------6----

   前缀、中缀、后缀分别对应树的先序、中序、后序遍历结果。

 

三、知识点

  树结构:先序、中序、后序遍历

  递归:树与递归的关系

  栈:栈与递归的关系

  字符串处理:stringstream自由转换string与其他类型,多次使用之间需要clear() & str("")

 

转载请注明引用自:

  http://www.cnblogs.com/breakthings/p/4051926.html 

 

posted @ 2014-10-26 14:13  breakthings  阅读(1586)  评论(0编辑  收藏  举报