c++简单计算器数据结构
时间: 2024-04-19 21:21:19 浏览: 16
C++简单计算器的数据结构可以使用栈来实现。栈是一种后进先出(LIFO)的数据结构,非常适合用于计算器的表达式求值。
在C++中,可以使用标准库中的`std::stack`来实现栈。栈中的元素可以是整数、浮点数或字符等。
下面是一个简单计算器的数据结构示例:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int calculate(string expression) {
stack<int> numStack; // 存储操作数的栈
stack<char> opStack; // 存储操作符的栈
for (int i = 0; i < expression.length(); i++) {
if (expression[i] == ' ') {
continue; // 忽略空格
} else if (isdigit(expression[i])) {
int num = 0;
while (i < expression.length() && isdigit(expression[i])) {
num = num * 10 + (expression[i] - '0');
i++;
}
numStack.push(num);
i--;
} else if (expression[i] == '(') {
opStack.push(expression[i]);
} else if (expression[i] == ')') {
while (!opStack.empty() && opStack.top() != '(') {
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
char op = opStack.top();
opStack.pop();
int result;
if (op == '+') {
result = num1 + num2;
} else if (op == '-') {
result = num1 - num2;
} else if (op == '*') {
result = num1 * num2;
} else if (op == '/') {
result = num1 / num2;
}
numStack.push(result);
}
opStack.pop(); // 弹出'('
} else {
while (!opStack.empty() && opStack.top() != '(') {
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
char op = opStack.top();
opStack.pop();
int result;
if (op == '+') {
result = num1 + num2;
} else if (op == '-') {
result = num1 - num2;
} else if (op == '*') {
result = num1 * num2;
} else if (op == '/') {
result = num1 / num2;
}
numStack.push(result);
}
opStack.push(expression[i]);
}
}
while (!opStack.empty()) {
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
char op = opStack.top();
opStack.pop();
int result;
if (op == '+') {
result = num1 + num2;
} else if (op == '-') {
result = num1 - num2;
} else if (op == '*') {
result = num1 * num2;
} else if (op == '/') {
result = num1 / num2;
}
numStack.push(result);
}
return numStack.top();
}
int main() {
string expression;
cout << "请输入表达式:";
getline(cin, expression);
int result = calculate(expression);
cout << "计算结果:" << result << endl;
return 0;
}
```
这个示例中,我们使用两个栈来实现计算器的数据结构。一个栈用于存储操作数,另一个栈用于存储操作符。通过遍历表达式字符串,我们可以将操作数和操作符按照规则入栈,并在遇到右括号时进行计算,直到最终得到结果。