数据结构实验之栈三:后缀式求值
Time Limit: 1000MS Memory limit: 65536K
题目描述
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
输入
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
输出
求该后缀式所对应的算术表达式的值,并输出之。
示例输入
59*684/-3*+#
示例输出
57
提示
基本操作数都是一位正整数!
来源
4.
后缀表达式求值。
首先建立一个栈并置空,然后依次左扫描后缀表达式,从第一个字符开始判断,如果
当前字符是数字则一直到数字串的末尾再将整个数字串作为一个整体压人栈,如果是运算
符,则将栈顶和次栈顶的两个“数字串”出栈并作相应的运算,然后将计算结果入栈。扫描
完前缀式后,栈中剩余的最后一个值就是前缀表达式的值。
示例程序#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int i = -1 , top = -1 , a[100] ;
char ch ;
while(scanf("%c", &ch) && ch != '#')
{
if(ch >= '0' && ch <= '9' )
a[++i] = ch - '0' ;
else
{
int n , m ;
n = a[i-1] ; m = a[i] ;
i -= 2 ;
if(ch=='+')
a[++i] = n +m ;
else if(ch == '-')
a[++i] = n - m ;
else if(ch == '*')
a[++i] = n *m ;
else
a[++i] = n / m ;
}
}
printf("%d\n", a[0]);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int i = -1 , top = -1 , a[100] ;
char ch ;
while(scanf("%c", &ch) && ch != '#')
{
if(ch >= '0' && ch <= '9' )
a[++i] = ch - '0' ;
else
{
int n , m ;
n = a[i-1] ; m = a[i] ;
i -= 2 ;
if(ch=='+')
a[++i] = n +m ;
else if(ch == '-')
a[++i] = n - m ;
else if(ch == '*')
a[++i] = n *m ;
else
a[++i] = n / m ;
}
}
printf("%d\n", a[0]);
return 0;
}