前缀式和后缀式

        这是我的第一篇博客,仅此序留恋。 在学习的过程中,经常会遇到一些知识点,在一段时间内弄明白了,然后,过了一段时间后,就忘记了。又得去百度或者找别人的博客查看。经历多次循环,最终决定自己写博客,也在此立誓,以后也会及时对一些原理性不是很透彻的或它写下。

     

 

  第一个博客是关于数据结构,表达式的转换,前缀式(波兰式)后缀式(逆波兰式)及在栈中的应用。 也就不废话了,和我们正常的表达式 a+b 相比较,+ab 或 ab+ 是一种不同的方式。其中的 a,b 我们不把它看成单个变量,而看成表达式整体,而其中的 + 则把它看成一种运算符。前面这一句是整个理解的核心。

       例如:   a+b-a*((c+d)/e-f)+g   中缀表达式:

我们把它转前缀或者后缀,以前缀式为例(把一个整体看成两个表达式的一个运算,把运算符放到两个表达式的前面),后缀式是相似的原理,把运算符放到两个表达式的后面。

首先可以把a+b-a*((c+d)/e-f) 看成一个整体表达式,把g看成一个表达式,则有 -[a+b-a*((c+d)/e-f)]g

然后对[a+b-a*((c+d)/e-f)]进行相同的操作,则有 -(a+b)a*((c+d)/e-f)   ----> -(+ab)*a((c+d)/e-f) --->-+ab*a((c+d)/e-f)

有 ((c+d)/e-f)---> -((c+d)/e)f  --->  /(c+d)e ---->  +cd 

以上步骤,一个对大表达式的前缀式转化成求内部小表达式的前缀,类似一种递归。

还有一个表达式转换关于栈的应用(仅限我自己理解):

中缀转后缀:   

                    规律: 从前到后扫描,如果是操作数,将结果写下,如果是运算符,则和栈内的运算符比较,如果此运算符的优先级 <= 栈内运算符优先级,则站内运算符出栈,继续和栈内运算符比较,规则一样,如果优先级>栈内运算符优先级则入栈。如果是左括号,则入栈,如果是右括号,则与之对应的左括号到右括号之间的运算符全部出栈。最后把栈内运算符全部写下。

中缀转前缀是 <  ,顺序是从后到前。

如有错误,欢迎指出,谢谢自己,谢谢大家的浏览!

        无         

 

        

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值