用栈实现表达式运算

1 算法思想

所包含的运算符有‘+’,‘-’,‘*’,‘/’,‘(’,‘)’。

(1)建立两个栈,一个用来存储操作数,另一个用来存储运算符,开始时在运算符栈中先压入‘/0’,一个表达式的结束符。

(2)然后从左至右依次读取表达式中的各个符号(操作数或者运算符);

(3)如果读到的是操作数直接存入操作数栈;

(4)如果读到的是运算符,则作进一步判断:

若读到的是‘/0’结束符,而且此时运算符栈的栈顶元素也是‘/0’结束符,则运算结束,输出操作数栈中的元素即为最后结果。

若读到的是‘(’或者读到的运算符的优先级比目前的运算符栈中的栈顶元素的优先级高,则将运算符直接存入运算符栈,继续读表达式中的下一个符号,重复步骤(3)和(4);

若读到的是‘),而且此时运算符栈的栈顶元素是‘(

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用实现表达式求值计算的步骤如下: 1. 创建两个,一个用于存储操作符的(称为运算),一个用于存储操作数的(称为操作数)。 2. 从左到右遍历表达式的每个字符。 3. 如果当前字符是数字,则将其转化为对应的操作数,并将操作数压入操作数。 4. 如果当前字符是操作符,则进行以下操作: a. 如果运算为空,或者当前运算符的优先级大于运算运算符的优先级,将当前运算符压入运算。 b. 否则,将运算顶的运算符弹出,并从操作数中弹出两个操作数进行运算,将运算结果压入操作数。重复此过程,直到当前运算符的优先级大于运算运算符的优先级,然后将当前运算符压入运算。 5. 当表达式遍历完毕后,如果运算不为空,则从运算中弹出运算符,并从操作数中弹出两个操作数进行运算,将运算结果压入操作数。重复此过程,直到运算为空。 6. 最后,操作数中的唯一元素即为表达式的求值结果。 参考资料: \[1\] 表达式求值基本理论过程 \[2\] 系统设计 \[3\] 各个模块的主要功能 #### 引用[.reference_title] - *1* [的应用——表达式求值(整数基础版)](https://blog.csdn.net/qq_51340322/article/details/115262497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [数据结构课程设计---------用实现表达式求值](https://blog.csdn.net/iteye_15968/article/details/82106487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值