完善下面算法。 后缀表达式求值,表达式13/25+61的后缀表达式格式为:13,25/61,+ int compute(a) //后缀表达式存储在数组a[1..m]中 { setnull(s); i=1; ch= ; while(ch!=’@’) { CASE ‘0’: CASE ‘1’: …… CASE ‘9’: x=0; while(ch!=’,’) { x=x*10+ord(ch)-ord(‘0’); i=i+1; ; } ‘+’ : x=pop(s)+pop(s); ‘-‘ : x=pop(s);x=pop(s)-x; ‘*’ : x=pop(s)*pop(s); ‘/’ : x=pop(s);x=pop(s)/x; } push(s,x); i=i+1; ch=a[i]; }; comput= ; }
时间: 2023-06-16 11:04:12 浏览: 61
后缀表达式求值
5星 · 资源好评率100%
完善后的算法如下:
int compute(int a[]) { //后缀表达式存储在数组a[1..m]中
stack<int> s; //使用STL库中的stack实现栈
int i=1, x=0; //i为数组下标,x为操作数
char ch=a[i]; //ch为当前字符
while(ch!='@') {
switch(ch) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
x=0; //将x清零
while(ch!=',') { //读取操作数
x=x*10+ch-'0'; //将字符转换为数字
i++; //指向下一个字符
ch=a[i];
}
s.push(x); //将操作数压入栈中
break;
case '+':
x=s.top(); //弹出栈顶元素作为右操作数
s.pop(); //弹出栈顶元素
x+=s.top(); //将栈顶元素作为左操作数与右操作数相加
s.pop(); //弹出栈顶元素
s.push(x); //将结果压入栈中
break;
case '-':
x=s.top(); //弹出栈顶元素作为右操作数
s.pop(); //弹出栈顶元素
x=s.top()-x; //将栈顶元素作为左操作数与右操作数相减
s.pop(); //弹出栈顶元素
s.push(x); //将结果压入栈中
break;
case '*':
x=s.top(); //弹出栈顶元素作为右操作数
s.pop(); //弹出栈顶元素
x*=s.top(); //将栈顶元素作为左操作数与右操作数相乘
s.pop(); //弹出栈顶元素
s.push(x); //将结果压入栈中
break;
case '/':
x=s.top(); //弹出栈顶元素作为右操作数
s.pop(); //弹出栈顶元素
x=s.top()/x; //将栈顶元素作为左操作数与右操作数相除
s.pop(); //弹出栈顶元素
s.push(x); //将结果压入栈中
break;
}
i++; //指向下一个字符
ch=a[i];
};
return s.top(); //返回栈顶元素作为计算结果
}
阅读全文