求用"逆波兰式" 实现 简单的计算器程序,输入一串四则运算式子,能给出结果解决思路

求用"逆波兰式" 实现 简单的计算器程序,输入一串四则运算式子,能给出结果
求   用逆波兰式   实现   简单的计算器程序,输入一串四则运算式子,能给出结果


如输入   5+8*(9+3),能给出结果


*如能在其中增加max   min   运算更好

如输入   5+8-max(2,3)+5*min(5,6),程序能给出结果

------解决方案--------------------
int GetValue_NiBoLan(char *str)//对逆波兰式求值
{
p=str;InitStack(s); //s为操作数栈
while(*p)
{
if(*p是数) push(s,*p);
else
{
pop(s,a);pop(s,b);
r=compute(b,*p,a); //假设compute为执行双目运算的过程
push(s,r);
}//else
p++;
}//while
pop(s,r);return r;
}//GetValue_NiBoLan
------解决方案--------------------
void NiBoLan(char *str,char *new)//把中缀表达式str转换成逆波兰式new
{
p=str;q=new; //为方便起见,设str的两端都加上了优先级最低的特殊符号
InitStack(s); //s为运算符栈
while(*p)
{
if(*p是字母)) *q++=*p; //直接输出
else
{
c=gettop(s);
if(*p优先级比c高) push(s,*p);
else
{
while(gettop(s)优先级不比*p低)
{
pop(s,c);*(q++)=c;
}//while
push(s,*p); //运算符在栈内遵循越往栈顶优先级越高的原则
}//else
}//else
p++;
}//while
}//
------解决方案--------------------
逆波兰式的问题楼上已经说的很清除了,再给个另外的思路吧
也可以用递归来求算式的值
int f(char* s,int b,int e)
{
if(s[b]== '( '&&s[e]== ') '&&匹配)
return f(s,b+1,e-1);
else
{
找到优先级别最低的操作符@,以及它的位置m
return f(s,b,m-1) @ f(s,m+1,e);
}
这样也能计算出以中序给出的算式的结果
至于你说的min max,直接些两个函数就可以了