- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验之计算器.doc
实验五:计算器
[实验题目]
模拟一个简单的计算器,可以进行等运算,要求输入的表达式必须是后缀表达式。
[概要分析]
从键盘上输入一个后缀表达式,通过数据栈的方法,输入数据,遇数入栈,遇到符号从
栈中弹出2个数据运算并将结果再压入栈屮,最后栈屮唯一的数据即为所求结果。建立
SeqStack.h , Stack.h , Calculator.h , SeqStack.cpp , Calculator.cpp , CalculatorMain.cpp ,
Stack.cpp,七个文件。
[详细设计]
1 ?类图结构
class Class Model
T:class
SeqStack
fMax: int
fTop: int
S: T*
Clear() : void
IsErrptyO : bool {query}
+ IsFullf) : bool {query}
+ Pop(): bool
+ Push(T) : bool
SeqStack(int)
^SeqStackO
Top(T) : bool {query}
?friend?
operator?(ostream. SeqStackT) : ostream - operator?(istream, SeqStackT): istream
fMax: int fTop: int
Calculator
+ Calculator(int)
+ DoOperator(char) : void
+ GetOperand(double, double): bool
+ PushOperand(doublG): void
+ Run(): void
V
T:class
Stack
1305012035 13电子二班 马璐瑶
+ Clear(): void
+ IsErrptyO : bool {query}
+ IsFullf): bool {query}
+ Pop() : bool
+ Push(T): bool
+ Top(T): bool {query)
2.核心代码
(1)屮缀表达式转后缀表达式
思路:从左向右扫描直到遇到“#”,遇数输出,遇符号入栈,确保入栈的符号的优先级大 于 栈内符号优先级;遇“)”连续退符号肓至“(”;最后输出栈内所有剩余操作
符。
(2)后缀衣达式计算思路
思路:遇数入栈,遇符号从栈中退出两个数据进行运算,并将结呆压入栈中,最后栈中唯一
的数据即为结果,切记要将最终结果输出seq.Top(x);cout?x; 具体代码(Run方法):
void Calculator::Run()
{
char ch;double x;
while(cin?ch,ch !=#)
{
switch(ch)
{
case1:
case1-1:
case1*:
case/:
DoOperator(ch);
break;
default:
cin.putback(ch);
cin?x;
PushOpera nd(x);
}
}
seq.Top(x);
cout?结果是:H?x?endl;
}
[程序代码]
1 ? Calculator.h
#ifndef CAL_H
#define CAL_H
#include SeqStack.h
class Calculator
public:
Calculator(int size);
void Run();
void PushOperand(double x);
void DoOperatorfchar ch);
bool GetOperand(double xl,double x2); protected:
private:
SeqStackdouble seq;
};
2.Stack.h
#ifndef Stack_h_
#define Stack_h_
template class T
class Stack
{
public:
virtual bool lsFull() const=0;
virtual bool IsEmptyO const=O;
virtual bool Push仃 x) =0;
virtual bool Pop() =0;
virtual bool Top(T x) const=O;
virtual void Clear()=0;
protected:
private:
};
#end 讦
3.SeqStack.h
#if defined(EA A1D9FD77 F4E6 44cl B988 47CD75FBCB1A INCLUDED ) #define EA_AlD9FD77_F4E6_44cl_B988_47CD75FBCBlA_INCLUDED_ #include Stack.h ttinclude
您可能关注的文档
最近下载
- 有趣的心理学课件.ppt VIP
- LabVIEW软件在锂电池故障模拟检测系统的设计与开发.docx VIP
- 木结构建筑防火性能分析.pptx VIP
- 第8章 剥蚀厚度与埋藏史和埋藏史恢复方法.ppt
- 05J909:工程做法国标 行业图集.pdf VIP
- 浙江省杭州市临平区2024−2025学年七年级上学期分班考 数学试题(7月份)(含解析).docx VIP
- 2024-2025学年江苏省苏州市星海实验中学高一(上)期中考试物理试卷(含答案).docx VIP
- 右心衰竭患者麻醉指南.pptx
- 销售人员必备山东省滨州市惠民县医疗机构分布明细.pdf VIP
- 销售人员必备山东省滨州市阳信县医疗机构分布明细.pdf VIP
文档评论(0)