栈知识点训练之计算(calc)

本文介绍了如何使用C++中的栈数据结构解决一个密码门问题,通过处理运算符优先级计算给定表达式的值。关键步骤包括构建数值栈和操作符栈,遵循特定的计算规则,如括号处理和运算符的嵌套应用。

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

一、问题描述

【题目描述】

        小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*”,“/”,“^”,求出的值就是密码。小明数学学得不好,还需你帮他的忙。(“/”用整数除法)

【输入】

        共1行,为一个算式。

【输出】

        共1行,就是密码。

二、知识点考察

本题考察的是数据结构之栈的运用。可以使用C++ STL 内置的stack来解决此问题,使用stack需要引入对应的头文件#include<stack>

三、解题思路 

        针对该题目,我们需要使用到两个栈,一个栈用来存储数值,不妨命名为values,另一个栈用来存储操作符,不妨命名为operators,针对不同的数据内容[数字或者运算符],需要做不同的处理。

        在这里,为了大家更方便理解,对输入输出样例进行一个模拟

(1)准备两个栈,一个values,一个operators,针对样例数据,如下所示:

(2)计算规则如下

 (3)计算过程模拟

有计算表达式如右:1+(3+2)*(7^2+6*9)/(2),现按照以上计算规则进行计算过程模拟

① 从左往右遍历字符串,遇到数字1,将其放入values栈

② 遇到运算符+,因为当前operators栈为空,因此直接将其放入operators栈

③ 遇到运算符(,根据规则,直接将运算符(其放入operators栈中 

④ 遇到数字3,根据规则,将数字入栈到values中

⑤ 遇到运算符+,根据规则,由于当前operators不为空,因此需要比较+和operators栈顶运算符的优先级,发现+的优先级高于(,因此将+入栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值