DS堆栈--表达式计算
时间: 2023-10-04 13:12:08 浏览: 91
DS堆栈是一种常见的数据结构,用于实现表达式计算。在使用C语言中的stack堆栈对象来实现时,可以参考课本中的伪代码,并将其改造成可运行的代码。首先,需要包含头文件#include <stack>,然后创建一个stack对象来表示堆栈。接下来,可以按照以下步骤进行表达式计算:
1. 遍历表达式中的每个字符。
2. 如果遇到数字,将其转换为对应的数值,然后将其压入堆栈。
3. 如果遇到操作符(如+、-、*、/等),从堆栈中弹出两个数字进行运算,并将结果压入堆栈。
4. 当遍历完整个表达式后,堆栈中只剩下一个数字,即为表达式的计算结果。
以下是一个示例代码,其中假设表达式存储在一个字符串中:
#include <iostream>
#include <stack>
#include <cctype>
#include <cstring>
using namespace std;
int calculateExpression(const char* expression) {
stack<int> numStack;
int len = strlen(expression);
for (int i = 0; i < len; i++) {
if (isdigit(expression[i])) {
int num = 0;
while (i < len && isdigit(expression[i])) {
num = num * 10 + (expression[i] - '0');
i++;
}
numStack.push(num);
} else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
int result;
switch (expression[i]) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
numStack.push(result);
}
}
return numStack.top();
}
int main() {
const char* expression = "2 1 2*3-4/5#";
int result = calculateExpression(expression);
cout << "计算结果:" << result << endl;
}
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)