C++利用链栈实现表达式求值
本文实例为大家分享了C++利用链栈实现表达式求值的具体代码,供大家参考,具体内容如下
#include<iostream.h>
typedefintStatus;
typedefcharCstack;
#defineOK1
#defineERROR0
typedefstructStackNode
{
Cstackdata;
structStackNode*next;
}StackNode,*LinkStack;
StatusInitStack(LinkStack&S)
{
S=NULL;
returnOK;
}
StatusPush(LinkStack&S,Cstacke)
{
StackNode*p;
p=newStackNode;
p->data=e;
p->next=S;
S=p;
returnOK;
}
StatusPop(LinkStack&S,Cstack&e)
{
StackNode*p;
if(S==NULL)returnERROR;
e=S->data;
p=S;
S=S->next;
deletep;
returnOK;
}
CstackGetTop(LinkStackS)
{
if(S!=NULL)
returnS->data;
}
StatusIn(Cstackch)
{
cin>>ch;
if(ch=='+')
returnOK;
elseif(ch=='-')
returnOK;
elseif(ch=='*')
returnOK;
elseif(ch=='/')
returnOK;
elseif(ch=='#')
returnOK;
else
returnERROR;
}
CstackPrecede(Cstackt1,Cstackt2)
{
switch(t1)
{
case'+':
switch(t2)
{
case'+':return'>';break;
case'-':return'>';break;
case'*':return'<';break;
case'/':return'<';break;
case'(':return'<';break;
case')':return'>';break;
case'#':return'>';break;
}
break;
case'-':
switch(t2)
{
case'+':return'>';break;
case'-':return'>';break;
case'*':return'<';break;
case'/':return'<';break;
case'(':return'<';break;
case')':return'>';break;
case'#':return'>';break;
}
break;
case'*':
switch(t2)
{
case'+':return'>';break;
case'-':return'>';break;
case'*':return'>';break;
case'/':return'>';break;
case'(':return'<';break;
case')':return'>';break;
case'#':return'>';break;
}
break;
case'/':
switch(t2)
{
case'+':return'>';break;
case'-':return'>';break;
case'*':return'>';break;
case'/':return'>';break;
case'(':return'<';break;
case')':return'>';break;
case'#':return'>';break;
}
break;
case'(':
switch(t2)
{
case'+':return'<';break;
case'-':return'<';break;
case'*':return'<';break;
case'/':return'<';break;
case'(':return'<';break;
case')':return'=';break;
case'#':return'>';break;
}
break;
case')':
switch(t2)
{
case'+':return'>';break;
case'-':return'>';break;
case'*':return'>';break;
case'/':return'>';break;
case'(':return'=';break;
case')':return'>';break;
case'#':return'>';break;
}
break;
case'#':
return'=';
break;
}
}
CstackOperator(Cstackt1,Cstackt2,Cstackt3)
{
t1=t1-48;
t3=t3=48;
intc;
switch(t2)
{
case'+':
c=t1+t2+48;
returnc;
break;
case'-':
c=t1-t2+48;
returnc;
break;
case'*':
c=t1*t2+48;
returnc;
break;
case'/':
c=t1/t2+48;
returnc;
break;
}
}
voidmain()
{
LinkStackOPTR,OPAN;
Cstackcha1,cha2,x,cha,thea;
InitStack(OPTR);
InitStack(OPAN);
Push(OPTR,'#');
cout<<"输入表达式的中间值及最终结果局限于0~9之间的个位数并以#号结束"<<endl;
while(cha!='#'||GetTop(OPTR)!='#')
{
cin>>cha;
if(!In(cha))
Push(OPAN,cha);
else
switch(Precede(GetTop(OPTR),cha))
{
case'<':
Push(OPTR,cha);
cin>>cha;
break;
case'>':
Pop(OPTR,thea);
Pop(OPAN,cha1);
Pop(OPAN,cha2);
Push(OPAN,(cha1,thea,cha2));
break;
case'=':
Pop(OPTR,x);
break;
}
}
cout<<GetTop(OPAN)<<endl;
return;
}
以上就是本文的全部内容,希望对大家学习C++程序设计有所帮助。