网站大量收购独家精品文档,联系QQ:2885784924

用栈的方式实现表达式求值.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用栈的方式实现表达式求值

一、程序设计任务 掌握栈的用法,实现表达式求值这一栈的典型应用问题:以字符序列的形式从终端输入语法正确的、不含变量的算术表达式,利用算符优先关系,实现对算术四则混合运算表达式求值。当用户输入一个合法的表达式后,能够返回正确的结果。能够计算的运算符包括:加、减、乘、除、括号 。 二、具体代码实现如下 #includeiostream.h #includefstream.h #includestring.h #includestdlib.h #includemath.h #includecstdio //cstdio本来就只是将stdio.h的内容用C++的头文件形式表现出来。 #define NULL 0 typedef struct node //定义一个结点结构体 { char date; struct node *next; }SNode; SNode *InitStack()//初始化空链栈 { SNode *top; top=new SNode;//top=(SNode *)malloc(sizeof(SNode)); top-next=NULL; return top; } void PushOptr(SNode *top,char x)//运算符进栈函数 { SNode *p; p=new SNode; p-date=x; p-next=top-next; top-next=p; } char PopOptr(SNode *top)//运算符出栈函数 { SNode *p; char x; if(top==NULL) return NULL; p=top-next; x=p-date; top-next=p-next; delete p; return x; } void PushOpnd(SNode *top,char x)//操作数进栈函数 { SNode *p; p=new SNode; p-date=x; p-next=top-next; top-next=p; } char PopOpnd(SNode *top)//操作数出栈函数 { SNode *p; char x; if(top==NULL) return NULL; p=top-next; x=p-date; top-next=p-next; delete p; return x; } char GetTop(SNode *top)//取栈顶元素 { return (top-next)-date; } int In(char c) { int n; switch(c) { case +: case -: case *: case /: case (: case ): case %: case ^: case #: n=1;break; default : n=0;break; } return n; } char Precede(char x,char y) //符号优先级规则说明 { int i,j; int form[9][9]= { {1,1,-1,-1,-1,1,-1,-1,1}, {1,1,-1,-1,-1,1,-1,-1,1}, {1,1,1,1,-1,1,1,-1,1}, {1,1,1,1,-1,1,1,-1,1}, {-1,-1,-1,-1,-1,0,-1,-1,2}, {1,1,1,1,2,1,1,1,1}, {1,1,1,1,-1,1,1,-1,1}, {1,1,1,1,-1,1,1,1,1}, {-1,-1,-1,-1,-1,2,-1,-1,0} }; //定义一个二维数组存放运算符优先级 switch(x) { case +:i=0;break; case -:i=1;break; case *:i=2;break; case /:i=3;break; case (:i=4;break; case ):i=5;break; case %:i=6;break; case ^:i=7;break; case #:i=8;break; } switch(y) { case +:j=0;break; case -:j=1;break; case *:j=2;break; case /:j=3;break; case (:j=

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档