用栈计算数学表达式的值.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验4 用栈计算表达式的值 一、 问题描述 实现栈,并基于栈求表达式的值。 二、 需求分析 1、简述程序的基本功能 将输入的一个表达式转化为后缀式,并计算该算式的值。 2、输入的形式和输入值的范围 输入的必须是一个整型算式,可以包含加减乘除以及小括号。 运算完成后,提示输入Y/N,输入为字符型,用以判断是否继续运算。 3、输出的形式 每一次运算后,输出运算结果为整型。 4、测试数据要求 要求输入的必须为运算式,即只能有整型数字加减乘除以及小括号。 三、 概要设计 1、抽象数据类型 有一个类class stack,它含有三个数据成员:*element 、top、maxsize;分别表示栈中元素、栈顶位置、栈的容量。还有几个成员函数用来进行进栈、出栈、取出栈顶元素、判断栈是否为空等操作。 2、主程序流程及模块调用关系 a) 定义char型指针变量s1,并为之申请了100个数据的空间; b) 用while循环语句开始运行程序; c) 键盘输入s1,即数学表达式; d) 程序运算并输出结果,然后提示是否继续运算,请求输入字符Y/N; e) 输入y或Y时,程序继续进行while循环,进行运算; 输入n或N时,程序结束; 若输入其他字符,提示输入错误,要求重新输入。 四、 详细设计(要求主要变量和语句加注释) 1、抽象数据类型的实现:包括类型定义和各个操作的实现。 #includeiostream using namespace std; templateclass T class stack { public: stack(int sz=100); ~stack(){delete[]element;}; bool push(T x); bool pop(T x); bool getTop(T x); bool IsEmpty(){return top==-1?true:false;}; bool Full(){return top==maxsize-1?true:false;}; int getsize(){return top+1;}; private: T *element; int top; int maxsize; }; templateclass T stackT::stack(int sz) { top=-1; maxsize=sz; element=new T[maxsize]; } templateclass T bool stackT::push(T x) { if(Full())return false; else element[++top]=x;return true; } templateclass T bool stackT::pop(T x) { if(IsEmpty())return false; else x=element[top--];return true; } templateclass T bool stackT::getTop(T x) { if(IsEmpty())return false; else x=element[top]; return true; } 2、主程序的实现 #includeStack.h #includestring.h #includeiostream using namespace std; bool IsOperator(char ch) { if(ch==+||ch==-||ch==*||ch==/)return true; else return false; } int judge(char ch) { if(ch==+||ch==-)return 1; else if(ch==*||ch==/)return 2; else if(ch==(||ch==#)return 0; } int cal(int n1,int n2,char ch) { if(ch==+)return n1+n2; else if(ch==-)return n1-n2; else if(ch==*)return n1*n2; else if(ch==/)return n1/n2; } char *postfix(char *s1) { int i=0,j=0; char *s2=new char[2*strlen(s1)],ch=s1[0],c; stackcharcs; cs.push(#); while(ch!=\0) { if(IsOperator(ch)) { if(s2[j-1]!= !IsOperator(s2[j-1]))s2[j++]= ; cs.getTop(c); if(judge(ch)judge(c)) { cs.push(ch); } else { cs

文档评论(0)

369221 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档