主题:用栈实现算法优先级问题———表达式求值
c结构ccc
[专家分:0] 发布于 2010-04-15 17:06:00
能给我个 用栈实现表达式求值么? 会的说下
谢了
沙发
howardqqme [专家分:20] 发布于 2010-04-16 10:07:00
char Precede(char pre_op,char ch)
{
int i,j;
char a[7][7]={ '>','>','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','>','>','<','>','>',
'>','>','>','>','<','>','>',
'<','<','<','<','<','=','0',
'>','>','>','>','0','>','>',
'<','<','<','<','<','0','='};
char b[7]={'+','-','*','/','(',')','='};
for(i=0;i<7;i++)
{
if(pre_op == b[i])
break;
}
for(j=0;j<7;j++)
{
if(ch==b[j])
break;
}
return a[i][j];
}
double Expression_Eval()
{
SeqStack<char,100> OPTR;
SeqStack<double,100> OPND;
OPTR.Push('=');
char ch=getchar();
char pre_op;
double a,b;
string num="";//定义字符串存放数据
bool flag=false;
while(ch!='='|| OPTR.Top()!='=')
{
if((ch>='0'&& ch<='9') || ch=='.')
{flag=true;num+=ch;ch=getchar();}
else
{
if(flag)
{
OPND.Push(atof(num.c_str()));num="";
flag=false;
}
pre_op=OPTR.Top();
switch(Precede(pre_op,ch))
{
case'<':
OPTR.Push(ch);ch=getchar();break;
case'=':
OPTR.Pop();ch=getchar();break;
case'>':
{
b=OPND.Pop(); a=OPND.Pop(); pre_op=OPTR.Pop();
OPND.Push(Operate(a,pre_op,b));break;
}
}
}
}
return OPND.Top();
}栈自己构造