利用栈求表达式的值

利用栈求表达式的值

ID:6590337

大小:329.00 KB

页数:28页

时间:2018-01-19

利用栈求表达式的值_第1页
利用栈求表达式的值_第2页
利用栈求表达式的值_第3页
利用栈求表达式的值_第4页
利用栈求表达式的值_第5页
资源描述:

《利用栈求表达式的值》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、利用栈求表达式的值编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符,则返回错误信息。3、若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。程序中应主要包含下面几个功能函数:voidinitstack():初始化堆栈  intMake_str():语法检查并计算  intpush_operate

2、(intoperate):将操作码压入堆栈  intpush_num(doublenum):将操作数压入堆栈  intprocede(intoperate):处理操作码  intchange_opnd(intoperate):将字符型操作码转换成优先级  intpush_opnd(intoperate):将操作码压入堆栈  intpop_opnd():将操作码弹出堆栈  intcaculate(intcur_opnd):简单计算+,-,*,/  doublepop_num():弹出操作数 源代码:#include#include

3、#include#include#defineMAXSIZE100#defineN1000inti=0;   //表达式数typedefstructexpression//表达式结构 { longdoubleresult;  charexpstr[MAXSIZE]; }expression;expressionexpr[N];//表达式的一个整体容器stypedefstruct//操作码栈定义 { charcode[MAXSIZE]; inttop; }opnd;typedefstruct//操作数栈定义 { doubledate

4、[MAXSIZE]; inttop; }num;//《——opnd栈操作——》:voidinitstack(opnd*op)//初始化栈 { op->top=-1; }intempty_opnd(opnd*op)//判空 { if(op->top==-1)  return0; elsereturn1; }intpush_opnd(opnd*op,charco)//压栈 { if(op->top==MAXSIZE-1)  {  printf("The"opnd"stackisfull.");  return0;  } op->top++; op->code[op-

5、>top]=co; return1; }charpop_opnd(opnd*op)//出栈 { chara=''; if(op->top==-1)  {  printf("error:The"opnd"stackisempty.");  returna;  } a=op->code[op->top]; op->top--; returna; }charget_opnd(opnd*op)//查看栈顶 { chara=''; if(op->top==-1)  {  printf("error:The"opnd"stackisempty.");  retu

6、rna;  } else  returnop->code[op->top]; }//《——num栈操作——》:voidinitstack(num*nu) { nu->top=-1; }intempty_num(num*nu)//判空 { if(nu->top==-1)  return0; elsereturn1; }intpush_num(num*nu,doubleda)//压栈 { if(nu->top==MAXSIZE-1)  {  printf("error:The"date"stackisfull.");  return0;  } nu->top++; 

7、nu->date[nu->top]=da; return1; }doublepop_num(num*nu)//出栈 { doublea=''; if(nu->top==-1)  {  printf("error:The"date"stackisempty.");  returna;  } a=nu->date[nu->top]; nu->top--; returna; }doubleget_num(num*nu)//查看栈顶 { if(nu->top!=-1)  returnnu->date[nu->top]; }//《——结束栈定义操作——》//《——

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。