c++链栈实现简易计算器
时间: 2023-11-22 10:06:06 浏览: 41
好的,我来为您介绍一下如何使用链栈实现简易计算器。
首先,我们需要定义一个链栈的结构体,包括数据域和指针域:
```
struct Node {
double data;
Node* next;
};
```
然后,我们需要定义一些基本的操作,如入栈、出栈、获取栈顶元素等:
```
void push(Node*& top, double data) {
Node* newNode = new Node;
newNode->data = data;
newNode->next = top;
top = newNode;
}
double pop(Node*& top) {
if (top == nullptr) {
throw "Stack is empty!";
}
double data = top->data;
Node* temp = top;
top = top->next;
delete temp;
return data;
}
double peek(Node* top) {
if (top == nullptr) {
throw "Stack is empty!";
}
return top->data;
}
```
接下来,我们可以利用这些基本操作来实现一个简易计算器。具体实现方法如下:
1. 读入一个表达式,将其中的数字和运算符分别入栈。
2. 当遇到一个运算符时,弹出栈顶的两个数字进行计算,并将结果入栈。
3. 重复步骤2,直到表达式中的所有运算符都被处理完毕。
4. 最终栈中剩下的数字就是表达式的计算结果。
下面是一个示例代码:
```
double calculate(string expression) {
Node* stack = nullptr;
for (int i = 0; i < expression.length(); i++) {
if (isdigit(expression[i])) {
double num = 0;
while (i < expression.length() && isdigit(expression[i])) {
num = num * 10 + (expression[i] - '0');
i++;
}
push(stack, num);
i--;
} else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
double num1 = pop(stack);
double num2 = pop(stack); switch (expression[i]) {
case '+':
push(stack, num2 + num1);
break;
case '-':
push(stack, num2 - num1);
break;
case '*':
push(stack, num2 * num1);
break;
case '/':
push(stack, num2 / num1);
break;
}
}
}
double result = pop(stack);
if (stack != nullptr) {
throw "Invalid expression!";
}
return result;
}
```
这样,我们就实现了一个简易的计算器。