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++程序设计有所帮助。