头歌算法5.12-5.13表达式求值
时间: 2025-01-08 16:22:39 浏览: 1
### 关于头歌平台中5.12至5.13期间算法表达式求值的内容
在头歌平台上,针对5.12到5.13阶段涉及的表达式求值相关内容主要集中在如何解析并计算算术表达式的值。这部分通常会涉及到栈这一重要数据结构的应用。
#### 使用栈实现表达式求值
为了处理带括号的四则运算表达式,可以采用两个栈来分别存储操作数和操作符。具体过程如下:
- 初始化两个栈:`operandStack`用于保存数值;`operatorStack`用来暂存遇到的操作符。
- 遍历给定字符串形式的表达式中的每一个字符:
- 如果当前字符是一个数字,则继续读取直到整个数字被识别出来,并将其压入`operandStack`[^1]。
```cpp
while (isdigit(expression[i])) {
num = num * 10 + expression[i] - '0';
++i;
}
operandStack.push(num);
```
- 当碰到加减乘除符号或其他优先级较低的操作符时,比较其与`operatorStack`顶部元素的优先级关系决定是否执行相应的运算逻辑并将结果重新放入`operandStack`中,之后再把新的操作符加入`operatorStack`。
```cpp
if (!operatorStack.empty()) {
while (!operatorStack.empty() && precedence(operatorStack.top(), currentOperator)) {
performOperation(operandStack, operatorStack);
}
}
operatorStack.push(currentOperator);
```
- 对于左括号直接推入`operatorStack`; 右括号意味着要不断弹出`operatorStack`里的操作符直至匹配上对应的左括号为止,在此过程中同样需要更新`operandStack`内的中间结果。
```cpp
else if (expression[i] == ')') {
while (!operatorStack.empty() && operatorStack.top() != '(') {
performOperation(operandStack, operatorStack);
}
// Remove the left parenthesis from stack.
operatorStack.pop();
}
```
最终当所有字符都被处理完毕后,可能还存在一些未解决的操作留在`operatorStack`里,这时应持续调用`performOperation()`函数直到该栈为空,此时`operandStack`顶端即为所求表达式的解。
阅读全文