用c语言实现无括号表达式求值
时间: 2023-05-15 19:07:52 浏览: 95
可以使用栈来实现无括号表达式求值。具体实现步骤如下:
1. 定义一个栈,用于存储操作数和运算符。
2. 从左到右遍历表达式中的每个字符。
3. 如果当前字符是数字,则将其转换为整数并压入栈中。
4. 如果当前字符是运算符,则从栈中弹出两个操作数,进行相应的运算,并将结果压入栈中。
5. 最后栈中只剩下一个元素,即为表达式的值。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} Stack;
void push(Stack *s, int x) {
if (s->top == MAX_STACK_SIZE - 1) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
int evaluate(char *expr) {
Stack s;
s.top = -1;
int i, op1, op2, result;
for (i = 0; expr[i] != '\0'; i++) {
if (isdigit(expr[i])) {
push(&s, expr[i] - '0');
} else {
op2 = pop(&s);
op1 = pop(&s);
switch (expr[i]) {
case '+':
result = op1 + op2;
break;
case '-':
result = op1 - op2;
break;
case '*':
result = op1 * op2;
break;
case '/':
result = op1 / op2;
break;
default:
printf("Invalid operator\n");
exit(1);
}
push(&s, result);
}
}
return pop(&s);
}
int main() {
char expr[] = "23+45-*";
int result = evaluate(expr);
printf("Result: %d\n", result);
return 0;
}
```
输出结果为:
```
Result: -17
```
这个表达式的意思是:先将 2 和 3 相加,得到 5;然后将 4 和 5 相乘,得到 20;最后将 5 和 20 相减,得到 -15。