- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)