中缀表达式(Infix Notation)的求解,只考虑双目运算符情况

本文介绍了中缀表达式及其求值方法,通过栈数据结构解析运算符的优先级和括号处理。文章详细阐述了利用两个栈(操作数栈s1和运算符栈s2)实现中缀表达式求值的过程,并提供了相关代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看了数据结构的书,刚刚学到栈,其中的一大应用就是求中缀表达式的值,于是实现了一个。(书上的代码错误好多)

 

先要说明一下:
1、什么是栈结构
2、什么是中缀表达式

 

栈(stack,也叫堆栈)
Wikipedia:http://en.wikipedia.org/wiki/Stack_(abstract_data_type)

 

栈是一种抽象数据结构(ADT, Abstract Data Type),可以比喻为只有一个出口的仓库,属于 Last-In-First-Out 结构,先进入的元素保存在栈底,后进入的元素依次从栈底向栈顶放置;当一个栈非空的时候,只能依次从栈顶取出元素。所以栈结构是先入后出的。

栈的操作主要有两种:入栈(Push,也有叫 压入,进栈等的),出栈(Pop,也有叫 弹出的)。
如果一个栈使用链式结构,那么整个栈的容量只取决于内存允许的容量。

 

中缀表达式(InfixNotation)
Wikipedia:http://en.wikipedia.org/wiki/Infix_notation

 

这是最常见的表达式,表达式就是用运算符连接起来有运算意义的式子,比如:
1+5*(2+1)

 

常见运算符(operator)有 + - * / % ^ ( )
而参与运算的叫做操作数(oprand),比如例子中的 1 5 2 1


由于运算符有优先级,所以一个表达式的求值需要考虑那两个运算符先运算,那两个后运算的问题。

但是如果从左向右读取表达式,然后根据运算符的先后顺序,再利用栈就可以求得一个表达式的值。

 

中缀表达式的运算规则如下:
·根据运算符优先级由高到低的顺序进行运算
·有括号出现时先算括号内的,后算括号外的,多层括号,由内向外进行
·乘方连续出现时先算最右面的

 

运算符之间存在如下比较关系
 * The operators' priority is show below:
(Comparison direction: Opt2 to Opt1)

<
运算符比较
  opt2              
op1 ^ * / + - ( ) #
^ >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值