从键盘上输入一个后缀表达式试编写算法计算表达式的值规定逆波兰表达式的长c语言
时间: 2023-10-05 13:02:59 浏览: 196
逆波兰表达式是一种不包含括号的表达式表示方法,通过顺序扫描后缀表达式,使用栈来辅助计算。
假设输入的后缀表达式为input,我们可以按照以下步骤编写算法计算表达式的值:
1. 初始化一个空栈stack,用于存储操作数和中间结果。
2. 从左到右扫描后缀表达式input的每个字符:
- 如果当前字符是操作数,则将其转换为对应的数值,并压入栈stack;
- 如果当前字符是运算符,则从栈stack中弹出两个操作数temp1和temp2,根据当前字符进行计算,将计算结果压入栈stack;
3. 扫描完整个后缀表达式后,栈stack中只会剩下一个元素,即计算结果。弹出栈顶元素作为最终表达式的值。
下面是一个用C语言实现计算后缀表达式的例子:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct Node{
int val;
struct Node* next;
}Node;
void push(Node** stack, int val){
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->val = val;
newNode->next = *stack;
*stack = newNode;
}
int pop(Node** stack){
int val = (*stack)->val;
Node* temp = *stack;
*stack = (*stack)->next;
free(temp);
return val;
}
int computeExpression(char* input){
Node* stack = NULL;
int i = 0;
while(input[i] != '\0'){
if(isdigit(input[i])){
push(&stack, input[i] - '0'); // 将字符转换为对应的数字
}
else{
int temp1 = pop(&stack);
int temp2 = pop(&stack);
switch(input[i]){
case '+':
push(&stack, temp2 + temp1);
break;
case '-':
push(&stack, temp2 - temp1);
break;
case '*':
push(&stack, temp2 * temp1);
break;
case '/':
push(&stack, temp2 / temp1);
break;
// 根据需求添加其他运算符的处理
}
}
i++;
}
return pop(&stack);
}
int main(){
char input[100];
printf("请输入后缀表达式:");
scanf("%s", input);
int result = computeExpression(input);
printf("计算结果为:%d\n", result);
return 0;
}
通过以上代码,我们可以从键盘上输入一个后缀表达式,并计算出表达式的值。注意,在输入后缀表达式时,请确保输入表达式的格式正确,避免出现语法错误。
阅读全文