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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx

1、6.2错误1 136.3错误2 136.4错误3 137.收获及体会: 15参考文献:1.前言1.1课题内容及要求题目39:算术表达式的求解问题描述:给定一个算术表达式,通过程序求出最后的结果。基本要求:从键盘输入要求解的算术表达式;采用栈结构进行算术表达式的求解过程;能够判断算术表达式正确与否;对于错误表达式给出提示;对于正确的表达式给出最后的结果;1.2选题目的及意义进一步熟悉和使用栈的基本操作,如栈的初始化,进栈,出栈的特性。学习在实际生活中使用栈来解决问题。2.系统分析2.1问题描述要正确计算表达式的值,必须要正确的解释表达式。首先解释算术表达式的运算规则,分为以下三点:先乘除后加减;

2、从左往右进行计算;有括号的,先算括号内的;任何一个表达式都是由运算符,操作数和界限符组成的。这里把运算符,界限符统称为算符。设两个操作符分别为op1和op2。为实现运算符的优先法则,优先关系会出现三种情况,op1的优先级高于op2的优先级,op1的优先级等于op2的优先级,op1的优先级小于op2的优先级。对于输入错误的,比如出现了表达式以外的非法字符,没有按照正确格式进行输入。系统会给出提示。 3.系统概要设计3.1系统总体架构设计3.2系统模块的设计为了更好的服务,结合用户的需求,有如下的模块设计:程序主要包括三个模块:主函数设计模块int main() 函数体栈模块:一些本程序需要的操作

3、,如初始化栈,定义栈,出栈,入栈,取栈顶元素。运算模块:对一些优先级的定义,以及基本的算术运算。4.系统详细设计为实现运算符的优先算法,可以用两个栈:运算符栈OPTR,操作数栈OPND。四则运算表达式算法的基本思想是:首先置操作数栈OPND为空栈,表达式起始符“#”为OPTR栈的栈底元素。依次读入表达式中的每个字符,是操作数则进栈OPND,是运算符就和OPTR栈的栈顶元素比较后,依据相应的优先权进行操作,直至整个表达式求值完毕(标志是两个运算符都为“#”)。 Op2Op1+-*/()#=栈的设计:typedef struct ElemType dataStackSize; int top; S

4、eqStack;void Init(SeqStack *s); /初始化栈int IsFull(SeqStack *s); /判断栈是否已满int IsEmpty(SeqStack *s); /判断栈是否是空void Push(SeqStack *s,ElemType x); /进行入栈操栈 ElemType Pop(SeqStack *s); /进行出栈操作ElemType getTop(SeqStack *s); /提取栈顶元素函数运算:int Advan(int t1,int t2); /判断符号的优先级int In(int c); /判断c是否为运算符 int Oprea(int a,

5、int theta,int b); /进行四则运算 int EvaluteExpression(); /进行算术表达式求值5.程序实现/stack.h 中#ifndef _STACK_H#define _STACK_H#define StackSize 100#define MaxLength 100typedef int ElemType; /提取栈顶元素 #endif/stack.c中#include stack.h#include stdlib.hvoid Init(SeqStack *s) /初始化? s-top=-1;int IsFull(SeqStack *s) /判断栈是否已满

6、return s-top=StackSize-1;int IsEmpty(SeqStack *s) /判断栈是否是空top=-1;void Push(SeqStack *s,ElemType x) /进行入栈操栈 if(IsFull(s) printf(栈已经溢出。); exit(1); top+; /栈顶指针加1 datas-top=x; /栈顶为新插入的值,data是数组,s-top数字 ElemType Pop(SeqStack *s) /进行出栈操作 if(IsEmpty(s)栈是空的 data s-top-; /先删除栈顶的元素,然后指针减一 ElemType getTop(SeqS

7、tack *s) /提取栈顶元素 top;/operstack.h 中#ifndef _OPERSTACK_H#define _OPERSTACK-H /进行算术表达式求值 /operstack.c 中operstack.hint Advan(int t1,int t2) /判断符号的优先级 int f; switch(t2) case +: /若t2符号是“+”“-” - if(t1=(|t1=# f=; else break; * /若t2符号是 *, /时 /) /若t2符号是(,此时应该优先级小继续输入,而不进行运算 ) printf(ERROR 括号不匹配n exit(0); bre

8、ak; /若t2符号是),此时一个括号已经完整,应该进行运算 switch(t1) case f= break;printf(ERROR 缺少左括号n exit(0); default: /若t2取出时是#,表示已经要计算最后一个表达式了 ERROR 缺少右括号n return f;int In(int c) /判断c是否为运算符 switch(c)return 1; default :return 0;int Oprea(int a,int theta,int b) /进行四则运算 int c; switch(theta) c=a+b; c=a-b; c=a*b; c=a/b; return

9、 c;int EvaluteExpression() /进行算术表达式求值 SeqStack OPTR,OPND; /构建两个栈,一个是放操作符,一个是放数据 int a,b,d,x,theta; char c; /存放键盘接收的字符 char z6; /存放整数串 int i; Init(&OPTR); /初始化运算符栈 Push(&OPTR, /#入栈,#是表达式结束的标志 OPND); /初始化数据栈 c=getchar(); /从键盘读入下一个字符到c x=getTop(& /x赋值为运算符栈顶元素 while(c!|x!) /当读入两个字符都为#时,则停止,返回最后的 / 结果X的值

10、 ,否则继续进行运算 if(In(c) /是运算符 switch(Advan(x,c)Push(&OPTR,c); /优先级低 ,继续进行输入 c=getchar();x=Pop(& /脱括号并计算下一个值 theta=Pop(& /优先级高,此时进行运算,从操 /作栈中取出一个运算符 b=Pop(& /从数据栈中取出两个数 a=Pop(& Push(&OPND,Oprea(a,theta,b); / 然后通过这两个数进行运算 else if(c0&c zi=0; /整数串结束 d=atoi(z); /将字符串转化为整数放入d中 Push(&OPND,d); /一个整数入到数据栈中 else

11、/两者以外显然不可能,出错 printf(ERROR 出现了非法的字符,表达式不符合格式n exit(0); x=getTop(& return x;6.程序测试6.1正确的结果6.2错误16.3错误26.4错误3该程序经过调试已经能够运行,并且能够正确的输出答案以及错误的提示。通过本次数据结构课程设计,能够更加深刻的体会栈的特点,更熟悉栈的相关操作,以及如何运用栈的相关知识解决生活中的实际问题。1 李文书数据结构与算法应用实践教程北京大学出版社2012.022 戴文华 赵君喆数据结构项目实训人民邮电出版社2012.093 李业丽 程晓锦 齐亚莉数据结构实验教程(基于c语言)清华大学出版社2014.04

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

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