利用栈求表达式的值Word文档下载推荐.docx
- 文档编号:21078046
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:3
- 大小:15.25KB
利用栈求表达式的值Word文档下载推荐.docx
《利用栈求表达式的值Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《利用栈求表达式的值Word文档下载推荐.docx(3页珍藏版)》请在冰豆网上搜索。
处理操作码intchange_opnd(intoperate):
将字符型操作码转换成优先级intpush_opnd(intoperate):
将操作码压入堆栈intpop_opnd();
将操作码弹出堆栈intcaculate(interru_opnd):
简单计算+,-,*,/doublepop_num():
弹出操作数
程序如下:
#include"
stdio.h"
string.h"
stdlib.h"
#defineMAXLEN100typedefstruct{charop;
intlevel;
}opt;
typedefstruct//定义操作符栈{optst[MAXLEN];
inttop;
}op_stack;
typedefstruct//定义值栈{doubleD[MAXLEN];
}D_stack;
//--------对栈操作的定义-------------optpeek(op_stack*s)//定义看栈顶函数{opterror=;
if(s->
top>
=0)returns->
st[s->
top];
elsereturnerror;
}intIsEmpty(op_stack*s)//定义判断栈空的函数{if(s->
top<
0)return0;
elsereturns->
top].op;
}charpush(op_stack*s,optc)//定义入栈函数{s->
top++;
s->
top]=c;
returnc.op;
}optpop(op_stack*s)//定义出栈函数{opti;
opterror=;
=0){i=s->
top].op='
\0'
;
top--;
returni;
}elsereturnerror;
}voidclear(op_stack*s)//定义初始化栈{s->
top=-1;
}//-----------------------------definethevaluestack-----------------------doubleDpeek(D_stack*s)//定义看栈顶函数{if(s->
D[s->
elsereturn0;
}intDIsEmpty(D_stack*s)//定义判断栈空的函数{if(s->
elsereturn(int)(s->
top]);
}doubleDpush(D_stack*s,doublec)//定义入栈函数{s->
returnc;
}doubleDpop(D_stack*s)//定义出栈函数{doublei;
top]='
}elsereturn0;
}voidDclear(D_stack*s)//定义初始化栈{s->
}doublecalval(char*exp){op_stackos;
//定义两个栈D_stackds;
chartmp[MAXLEN]=;
inti=0,leng;
doubledtmp,dpoptmp;
optA=;
optR=;
optM=;
optD=;
optB=;
optMo=;
clear(&
os);
Dclear(&
ds);
//-----定义初始化结束-----while(*exp!
='
){while(*exp>
0'
&
*exp<
9'
||*exp=='
.'
){tmp[i++]=*exp++;
}dtmp=atof(tmp);
Dpush(&
ds,dtmp);
leng=strlen(tmp);
for(i=0;
i<
leng;
i++){tmp[i]='
}i=0;
}//-------------------------------switch(*exp){case'
+'
:
if(!
IsEmpty(&
os)||peek(&
os).level<
A.level){push(&
os,A);
*exp++;
}else{while(IsEmpty(&
os)&
peek(&
os).level>
=A.level){switch(pop(&
os).op){case'
%'
dpoptmp=Dpop(&
dpoptmp=(float)((int)Dpop(&
ds)%(int)dpoptmp);
ds,dpoptmp);
break;
case'
*'
ds)*Dpop(&
/'
ds)/dpoptmp;
ds)+Dpop(&
-'
ds)-dpoptmp;
}}push(&
}break;
R.level){push(&
os,R);
=R.level){switch(pop(&
M.level){push(&
os,M);
=M.level){switch(pop(&
D.level){push(&
os,D);
=D.level){switch(pop(&
Mo.level){push(&
os,Mo);
=Mo.level){switch(pop(&
('
push(&
os,B);
exp++;
)'
while(peek(&
os).level!
=-2){switch(pop(&
}}pop(&
//弹出(exp++;
}}while(IsEmpty(&
os)){switch(pop(&
}}returnDpop(&
}voidmain(){charstring[MAXLEN];
char*p=string;
printf("
输入表达式:
\n"
);
gets(p);
%s=%f\n\n"
string,calval(p));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 表达式