逆波兰表示法是一种将运算符(operator)写在操作数(operand)后面的描述程序(算式)的方法。举个例子,我们平常用中缀表示法描述的算式(1 + 2)*(5 + 4),改为逆波兰表示法之后则是1 2 + 5 4 + *。相较于中缀表示法,逆波兰表示法的优势在于不需要括号。 请输出以逆波兰表示法输入的算式的计算结果。 输入格式: 在一行中输入1个算式。相邻的符号(操作数或运算符)用1个空格隔开。 输出格式: 在一行中输出计算结果。 限制: 2≤算式中操作数的总数≤100 1≤算式中运算符的总数≤99 运算符仅包括“+”、“-”、“*”,操作数、计算过程中的值以及最终的计算结果均在int范围内,用c语言做出来
时间: 2024-03-19 19:44:29 浏览: 24
好的,这里给出用 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 定义栈结构体 */
typedef struct {
int top; /* 栈顶指针 */
int capacity; /* 栈的容量 */
int *elements; /* 栈的元素数组 */
} Stack;
/* 栈的初始化 */
void init(Stack *s, int capacity) {
s->capacity = capacity;
s->elements = (int*)malloc(sizeof(int) * capacity);
s->top = -1;
}
/* 判断栈是否为空 */
int is_empty(Stack *s) {
return s->top == -1;
}
/* 判断栈是否已满 */
int is_full(Stack *s) {
return s->top == s->capacity - 1;
}
/* 入栈 */
void push(Stack *s, int element) {
if (is_full(s)) {
printf("Stack is full.\n");
return;
}
s->elements[++s->top] = element;
}
/* 出栈 */
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
return -1;
}
return s->elements[s->top--];
}
/* 计算函数 */
int calc(int op1, int op2, char op) {
int result;
switch (op) {
case '+': result = op2 + op1; break;
case '-': result = op2 - op1; break;
case '*': result = op2 * op1; break;
default: break;
}
return result;
}
int main() {
char str[200]; /* 输入的算式 */
Stack s; /* 定义栈 */
int i, len, op1, op2; /* 定义变量 */
char op;
/* 初始化栈 */
init(&s, 100);
/* 读入算式 */
fgets(str, 200, stdin);
/* 去掉换行符 */
len = strlen(str);
if (str[len-1] == '\n') {
str[len-1] = '\0';
}
/* 遍历算式 */
len = strlen(str);
for (i = 0; i < len; i++) {
/* 如果是空格,则跳过 */
if (str[i] == ' ') {
continue;
}
/* 如果是数字,则入栈 */
else if (str[i] >= '0' && str[i] <= '9') {
push(&s, str[i] - '0');
}
/* 如果是运算符,则从栈中取出两个操作数进行计算,将结果压入栈中 */
else {
op1 = pop(&s);
op2 = pop(&s);
op = str[i];
push(&s, calc(op1, op2, op));
}
}
/* 输出计算结果 */
printf("%d\n", pop(&s));
return 0;
}
```
该程序实现了栈的基本操作,包括初始化、入栈、出栈、判断栈是否为空或已满。在遍历输入的算式时,如果遇到数字,则将其转换为整数并入栈;如果遇到运算符,则从栈中取出两个操作数进行计算,将计算结果再次入栈。最终将栈中剩余的元素(即计算结果)输出即可。
相关推荐
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.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)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)