}
S->next=p; return OK;
Status Pop(LinkStack &S,SElemType &e){ }
SElemType GetTop(LinkStack &S){ }
SElemType EvaluateExpression(){
//表达式求值
LinkStack OPTR,OPND; char a,b,c,x,thate;
char OP[10]={'0','1','2','3','4','5','6','7','8','9'}; InitStack(OPTR); Push(OPTR,'#'); InitStack(OPND); c=getchar();
while(c!='#'||GetTop(OPTR)!='#'){
if(!In(c,OP)){
Push(OPND,c); c=getchar();}
//得到顶部数据 return S->next->data; //出栈 SqStack *p;
if(S->next==NULL) return ERROR; p=S->next; e=p->data; S->next=p->next; return OK;
else{
}
}
}
switch (Precede(GetTop(OPTR),c)){ case '<':
Push(OPTR,c); c=getchar(); break;
case '=':
Pop(OPTR,x); c=getchar(); break;
case '>': }
Pop(OPTR,thate); Pop(OPND,b); Pop(OPND,a);
Push(OPND,Operate(a,thate,b)); break;
return GetTop(OPND);
Status In(char c,char *OP){ }
SElemType Precede(char x,char y){
//判断优先关系 int i,j;
//判断C就是否就是数 for (int i=0;i<10;i++){ } return OK;
if (OP[i]==c)return ERROR;
}
char a[7] = {'+','-','*','/','(',')','#'};//运算符 char b[7][7]={'>','>','<','<','<','>','>',
'>','>','<','<','<','>','>', '>','>','>','>','<','>','>',
'>','>','>','>','<','>','>', '<','<','<','<','<','=',' ', '>','>','>','>',' ','>','>',
'<','<','<','<','<',' ','='};//优先关系表
for( i=0;i<7;i++){ }
for( j=0;j<7;j++){ }
return b[i][j];
if(a[j]==y){break;} if(a[i]==x){break;}
SElemType Operate(char x,char thate,char y){
//运算返回结果
char a[4]={'+','-','*','/'};//运算符 int i,j,k; for(i=0;i<4;i++){ } x-=48; y-=48; switch (i){
case 0:return x+y+48; case 1:return x-y+48; case 2:return x*y+48; case 3:return x/y+48;
if(a[i]==thate)break;
}
}
return ERROR;
//main、cpp
#include\、h\int main(){ }
cout<<\请输入十以内得表达式(以‘#’号结束)\
cout<<\该表达式得值就是:\return 0;
? 运行结果:
五.实验结果得分析与评价(该部分如不够填写,请另加附页)
1. 栈先入后出,利用这一特性可以解决很多问题,但就是也有很多弊端
2. 表达式求值比较麻烦涉及到得知识有点多,函数也比较复杂、不过用工程将文件分
类后还就是清晰简单了些、也方便修改、
注:实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。
相关推荐: