ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:47.27KB ,
资源ID:3078537      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3078537.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计带括号的算术表达式求值.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计带括号的算术表达式求值.docx

1、数据结构课程设计带括号的算术表达式求值、实验的目的和要求1.采用算符优先数算法 , 能正确求值表达式 ;2.熟练掌握栈的应用 ;3熟练掌握计算机系统的基本操作方法 ,了解如何编辑、编译、链接和运行一个 C+程序;4.上机调试程序 ,掌握查错、排错使程序能正确运行。三、 实验的环境 :指硬件和软件环境1.硬件环境 : Intel 奔腾双核 T2390 双核处理器 (1.86GHz 主频 /1MB 二级缓存 /533MHz 前端总线 ), RAM:2G .2.软件环境 : 操作系统: windows vista编译软件: Microsoft Viual C+6.03.软件环境介绍 :Visual

2、C+是一个功能强大的可视化软件开发工具。 自1993年Microsoft公司推出VisualC+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工 具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0) ,但它的应用的很大的局限性,只 适用于 Windows 2000,Windows XP 和 Windows NT4.0。所以实际中,更多的是以 Visual C+6.0 为平台。Visual C+6.0不仅是一个C+编译器,而且是一个基于 Windows操作系统的可视化集成开发环境( integrated development e

3、nvironment,IDE )。 Visual C+6.0 由许多组件组成,包 括编辑器、调试器以及程序向导 AppWizard 、类向导 Class Wizard 等开发工具。 这些组件 通过一个名为 Developer Studio 的组件集成为和谐的开发环境。四、 算法描述 :1.头文件 :Stack.hCalculator.hMethod:Stack method:Push(); / 进栈操作Pop(); / 出栈操作GetHead(); / 返回栈中的最顶层元素MakeEmpty(); / 清空栈操作Calculator method:Calculator();/ 计算主体 cel

4、arstream(); / 清空输入流Prior();/ 返回运算符的优先级 done(); / 做一次二元运算 output(); / 打印结果并输出EnEmpty(); / 调用 MakeEmpty(), 并清空栈2.cpp 文件Calculator.cppMethod:int main(); / 主程序3.程序流程图优先级比较算法Data算法存放操作字符 存放数据调用 Calculator。结束4.功能描述(1)所有函数都是在 calculator。函数为主体,调用其他函数开始的。 Calculator函数让输入的中缀表达式按字符读取。(2)如果读取为操作数,则将字符返回输入流 (cin

5、.putback),读操作数并进data栈,然后读入下一字符送入 ch。(3)如果读取为操作符,则判断操作符类型,确定优先级。不同的优先数的操作符进行 不同的运算。 用output函数进行结果等的输出。Enempty为清空两个栈。(6) 主函数调用时,创建 calculator 实例,调用 calculator 函数进行计算,然后调用 output 函数进行输出,最后调用 enempty 清空栈。注:程序有两个栈,分别为 data和sign。分别存放操作数和操作符; 此程序要求输入的是中缀表达式,即直接对中缀表达式求值 , 不用转化为后缀在求值。五、源程序清单 :Stack.h #includ

6、e #include #include #include #include #define ERROR -1 #define BLANK 0 #define DATA 1 #define KUOHAO1 5 #define KUOHAO2 2 #define ADD_OR_SUB 3 #define MUT_OR_DIV 4 const int size=500; template class Stack; template class StackNode /堆栈的结点类 friend class Stack;Elem elem;StackNode *link;StackNode (Elem

7、e=0, StackNode *l=NULL):elem(e),link(l) /coutelem is : eendl;template class Stack;template class Stackint number;StackNode *head;public:Stack():number(0),head(NULL)Stack()StackNode *tmp=head;while(head!=NULL)head=head-link;delete tmp;tmp=head;void Push(const Elem &e)number+;head=new StackNode(e, hea

8、d);void MakeEmpty()StackNode *tmp=head;while(head!=NULL) head=head-link; delete tmp; tmp=head;number=0;void Pop()assert(number!=0);number-;StackNode *tmp=head; head=head-link;delete tmp;Elem GetHead()return head-elem;int GetNumber() const return number; / 返回堆栈中元素的数目 ;Calculator.hclass Calculatorpriv

9、ate:Stack data;/ 数据栈Stack sign;/ 运算符栈int flag; / 标志位表示前一个输入的是数还是一个运算符public:Calculator()flag=BLANK;Calculator()int Prior(char ch) const/ 返回运算符的优先级switch(ch)case ):return 1;case +: case -:return 2;case *:case /:return 3;case (:return 5;default:return -1;void clearstream()/ 清空输入流char ch;while(cinch, c

10、h!=;) ;void done(char ch)/ 做一次二元运算double a, b;a=data.GetHead(); data.Pop();b=data.GetHead(); data.Pop(); switch(ch)case +:b+=a; break; case -:b-=a; break; case *:b*=a; break; case /:if(a=0) cout 除数为零 ! 返回系统默认值如下 ch, ch!=)if(ch=0 & ch=9 | ch=.)if(flag=DA TA) coutnError input! 小数点只能有一位 ! d;data.Push(d

11、);flag=DA TA;else/如果输入的是字符, 则作出判断int prio=Prior(ch);char tempch, chprior;switch( prio )case -1: coutnError input! 不允许的字符 = Prior(ch) )done( sign.GetHead() );sign.Pop();flag = ADD_OR_SUB;sign.Push( ch );break;case 3: / 如果当前输入是一个 * 或者 / 号/ 如果前一个输入是一个 * 或者 / 号/如果它前面不只一个数字, 则做它前面的运算 if(data.GetNumber()!=1)chprior=Prior(sign.GetHead();if(chprior=Prior(ch) & sign.GetHead()!=()chprior=sign.GetHead();sign.Pop(); done(chprior);sign.Push(ch);flag=MUT_OR_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1