当前位置: 首页 > news >正文

wordpress 短信插件seo流量排名软件

wordpress 短信插件,seo流量排名软件,今天河北沧州确诊名单,一场疫情让浙江又火了网上找了一些资料,摘录下来做笔记,出处已不可考,如果有侵犯到作者版本,请告知ecras_y163.com。 逆波兰表达式 逆波兰对这种字符串的表达式计算很容易,只要把一个普通的表达式转换成逆波兰后计算就轻松很多!…

网上找了一些资料,摘录下来做笔记,出处已不可考,如果有侵犯到作者版本,请告知ecras_y@163.com。

 

逆波兰表达式

逆波兰对这种字符串的表达式计算很容易,只要把一个普通的表达式转换成逆波兰后计算就轻松很多!

首先看一下普通表达式:(1+2)*(2-1) 转成逆波兰后变成 1 2 + 2 1 - *

下面说说怎么转成逆波兰,然后再说计算逆波兰!

 

假设要转的表达式是一条合法的表达式(这个自己事先写个代码判断表达式的合法性),那么遵照下面的规则就可以转成逆波兰了:

1.首先把普通的表达式按照运算符分离出来放在一个集合E中,比如1+2*3 分离后集合里的元素就是 1 + 2 * 3 五个元素

2.再定义一个集合R(最好是字符串类型的集合,免得后面要转类型),主要是用来存放逆波兰表达式的,还有定义一个堆栈(存储运算符用),最后从左到右遍历集合E

3.遍历E的规则如下:

3.1如果该元素是数字,直接把它添加到集合R中

3.2否则它肯定是运算符,那么再进行判断

3.2.1如果该元素是左括号,或者当时栈为空,那么直接入栈

3.2.2如果该元素是右括号,则把栈内的运算符出栈并添加到集合R中,直到遇到第一个左括号结束(左括号也出栈但不添加到R)

3.2.3否则该元素是普通的运算符(也就是+-*/之类的),那么用该运算符和栈内的运算符号比较优先级(至于怎么比较它们的优

先级,你可以定义一个函数,传一个运算符过去,返回一个int,int值越大优先级越高),如果该运算符的优先级比栈内的运

算符优先级高 或者 栈为空,则直接入栈,否则把栈内的运算符出栈并添加到R中,再判断下个栈内的运算符优先级,直到遇

栈内的运算符优先级<=该运算符或者栈为空时再把该运算符入栈

3.3整个过程完成后,再把栈内的所有运算符出栈并添加到R中

 

下面看着表达式来理解上面的步骤

运算符优先级:

( ) 1

+ - 2

* / % 3

值越大优先级越高,注意括号优先级是最低的

 

表达式:2*(1+2/2)

定义集合E储存分离的表达式,E{ 2, *, (, 1, +, 2, /, 2, ) }

定义集合R储存逆波兰, R{...}

定义堆栈S储存运算符, S{...}

从左到右遍历E,开始判断

E[0]是数字2,直接添加到R,R{ 2 }

E[1]是乘号,和栈内运算符比较优先级,这时栈为空,所有直接入栈,S{*}

E[2]是左括号,直接入栈,S{ *, ( }

E[3]是数字1,直接添加到R,R{ 2, 1 }

E[4]是加号,比较栈顶运算符,栈顶为"(",加号比它优先级高,所有直接入栈, S{ *, (, + }

E[5]是数字2,直接添加到R, R{ 2, 1 , 2 }

E[6]是除号,比较栈顶运算符,栈顶为"+",除号>加号,直接入栈, S{ *, (, +, / }

E[7]是数字2,直接添加到R,R{2, 1, 2, 2}

E[8]是右括号,把栈内运算符出栈并添加到R直到遇到第一个左括号,R{ 2, 1, 2, 2, /, + } S{ * },注意左括号出栈但不加到R

那么整个过程就完毕,最后一步把栈内的所有元素添加到R

R{ 2, 1, 2, 2, /, +, * } S{...}

那么表达式2*(1+2/2) 转逆波兰变成 2 1 2 2 / + *

 

计算逆波兰非常简单,也需要一个堆栈,规则是:

1.从左到右遍历R

2.如果该元素是数字,直接入栈

3.如果该元素是运算符,出栈两个数,计算结果再入栈,逆波兰遍历完后栈内的元素就是表达式的值了

 

如:R{ 2, 1, 2, 2, /, +, * }

1.数字就入栈,那么S{ 2, 1, 2, 2 }

2.除号,出栈两个2 / 2 = 1,再入栈 S{ 2, 1, 1 }

3.加号,出栈两个1 + 1 = 2,再入栈S{ 2, 2 }

4.乘号,出栈两个2 * 2 = 4,再入栈S{ 4 }

5.逆波兰已遍历完,栈内元素是4,对照下普通表达式的运算结果是否相同?

 

关于预处理问题

转换成逆波兰前必须先要处理一下

A.比如你要分离普通表达式的时候,负号和减号是相同的,得把减号用其他符号代替,怎么判断是减号还是负号?很简单,从右往左遍历,遇到"-"时再判断它的前一个符,如果是数字或者右括号,那么它就是减号!

 

B.如果表达式的第一个符是负号,也就是形如-(1+2),那么根据上面第一条的判断它为负号而不是减号,分离这个表达式时就会变成 - ( 1 + 2 ),负号就会被独立分离出来,这样转逆波兰是没有问题,但是计算逆波兰就有问题,它会被转成逆波兰为:- 1 2 +的样子,因为负号会被认为是运算符,所以把栈内元素出栈计算,这时栈根本就是为空的,就会出异常!解决办法是如果表达式的第一个符号为负号,在整个表达式前面加一个0,就会变成

0-(1+2),这样根据A判断"-"就会被当成是减号而不是负号,0减去后面的数不就是负数了嘛!

 

C.类似第2条,看下形如1*-(-(-(1+2)))这样的表达式,根据A的判断"-"会被当成负号,显然,和B一样,也会出现一样的错误,解决办法还是加0,首先判断如果它是负号,再判断它后面是数字还是运算符,如果是运算符就在负号前面加个0,那么整个下来表达式就会变成1*0-(0-(0-(1+2)))

转载于:https://www.cnblogs.com/jojodru/archive/2012/10/10/2718091.html

http://www.lbrq.cn/news/2761921.html

相关文章:

  • html5网站建设 教程自媒体怎么赚钱
  • 政府网站建设工作的自查报告重庆网站制作
  • 清远佛冈住房和城乡建设局网站ciliba最佳磁力搜索引擎
  • 青岛建网站选青岛博采网络二十四个关键词
  • 免费广州网站开发维护陕西seo优化
  • b2b网站用织梦可以做吗电商运营推广是做什么的
  • 做公司网站需要什么网站推广优化公司
  • 合肥哪个公司做网站好广告公司推广软文
  • 内部网络网站怎么做注册网站在哪里注册
  • 做名片用哪个网站百度推广在线客服
  • 优秀网站seo报价如何推广宣传一个品牌
  • win7如何做网站服务器网推放单平台
  • 网站栏目名称seo系统源码
  • 深圳企业网站建设开发费用私人做网站
  • 青海省住房和城乡建设厅的官方网站企业建站免费模板
  • 网站建设+临沂怎么在百度上做广告
  • 深圳西乡 网站建设品牌整合营销
  • 视频类网站建设的成果深圳搜索引擎优化推广便宜
  • 网站改版中百度认证是什么
  • 个人网站限制网址缩短
  • wordpress php那个版本号seo排名的影响因素有哪些
  • 万江营销型网站建设站长工具网站备案查询
  • 云南域名注册网站建设网络宣传渠道有哪些
  • 网站主办者冲突 请核实后再次报备关键词百度网盘
  • 站长之家查询的网址网络seo优化推广
  • 如何给一个公司做网站网络营销有什么方式
  • 连云港网站建设多少钱合肥百度快速排名优化
  • 珠海微网站制作怎么做个人网页
  • 建网站需要服务器吗免费域名注册平台有哪些
  • 深圳网站制作的网站推广方案策划
  • Lucene 8.5.0 的 `.pos` 文件**逻辑结构**
  • 【iOS】Block补充
  • Docker之自定义jkd镜像上传阿里云
  • Spring 创建 Bean 的 8 种主要方式
  • 【LLM】文献阅读-ISOLATE GPT:基于大语言模型的执行隔离架构
  • 关于原理解析和编程技巧的深度探索!