欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构课程设计-表达式求值【完整版】.docx

    • 资源ID:871780       资源大小:60.86KB        全文页数:17页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计-表达式求值【完整版】.docx

    XXXXXX大学数据结构课程设计报告班级:学号:姓名:指导老师:-算术表达式求值一、需求分析二、程序的主要功能三、程序运行平台四、数据结构五、算法及时间复杂度六、测试用例七、程序源代码二感想体会与总结算术表达式求值一、需求分析一个算术表达式是由操作数(OPerand)、运算符(OPeratOr)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符,如:#(7+15)*(23-28/4)引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。二、程序的主要功能(1)从键盘读入一个合法的算术表达式,输出正确的结果。(2)显示输入序列和栈的变化过程。三、程序运行平台VisualC+6.0版本四、数据结构本程序的数据结构为栈。(1)运算符栈局部:structSqStack定义栈(char*base;栈底指针char*top;栈顶指针intstacksize;栈的长度intInitStack(SqStack&s)建立一个空栈S(if(!(s.base=(char*)malloc(50*sizeof(char)exit(O);s.top=s.base;s.stacksize=50;returnOK;charGetTop(SqStacks,char&e)运算符取栈顶元索if(s.top=s.base)栈为空的时候返回ERROR(Printf("运算符栈为空!n");returnERROR;)elsee=*(s.top-1);栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OKreturnOK;intPush(SqStack&s,chare)运算符入栈if(s.top-s.base>=s.stacksize)(Printf("运算符栈满!n");s.base=(char*)realloc(s.base,(s.stacksize+5)*sizeof(char);栈满的时候,追力口5个存储空间if(!s.base)exit(OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=5;*(s.top)+=e;把e入栈returnOK;)intPo(SqStack&s,char&e)运算符出栈(if(s.top=s.base)栈为空栈的时候,返回ERROR(Printf("运算符栈为空!行);returnERROR;else(e=*-s.top;栈不为空的时候用e做返回值,删除S的栈顶元素,并返回OKreturnOK;intStackTraverse(SqStack&s)/运算符栈的遍历(char*t;t=s.base;if(s.top=s.base)(Printf(“运算符栈为空!n“);栈为空栈的时候返回ERRORreturnERROR;while(t!=s.top)(printf(,%c,',*t);栈不为空的时候依次取出栈内元素t+;)returnERROR;(2)数字栈局部:structSqStackn定义数栈int*base;栈底指针i11t*top;栈顶指针intstacksize;栈的长度;intInitStackn(SqStackn&s)建立一个空栈S(s.base=(int*)malloc(50*sizeof(int);if(!s.base)exit(OVERFLOW);存储分配失败s.top=s.base;s.stacksize=50;returnOK;intGetTopn(SqStackns,int&e)数栈取栈顶元素if(s.top=s.base)(Prirltf(“运算数栈为空!r);栈为空的时候返回ERRORreturnERROR;)else'e=*(stoP-1);栈不为空的时候,用e作返回值,返回S的栈顶元素,并返回OKreturnOK;intPushn(SqStackn&s,inte)数栈入栈(if(s.top-s.base>=s.stacksize)(Printf("运算数栈满!n");栈满的时候,追加5个存储空间s.base=(int*)realloc(s.base,(s.stacksize+5)*sizeof(int);if(!s.base)exit(OVERFLOW);s.top=s.base+s.stacksize;插入元素e为新的栈顶元素s.stacksize+=5;)*(s.top)+=e;栈顶指针变化returnOK;)intPopn(SqStackn&s,int&e)/数栈出栈(if(s.top=s.base)(printf("运算符栈为空!n”);栈为空栈的视时候,返回ERRoRreturnERROR;else(e=*-s.top;栈不空的时候,那么删除S的栈顶元素,用e返回其值,并返回OKreturnOK;)intStackTraversen(SqStackn&s)数栈遍历int*t;t=s.base;if(s.top=s.base)(printf("运算数栈为空!r);/栈为空栈的时候返回ERRORreturnERROR;while(t!=s.top)(printf(%d",*t);栈不为空的时候依次输出t+;)returnERROR;)五、算法及时间复杂度1、算法:建立两个不同类型的空栈,先把一个#'压入运算符栈。输入一个算术表达式的字符串(以#结束),从第一个字符依次向后读,把读取的数字放入数字栈,运算符放入运算符栈。判断新读取的运算符和运算符栈顶得运算符号的优先级,以便确定是运算还是把运算符压入运算符栈。最后两个#'遇到一起那么运算结束。数字栈顶的数字就是要求的结果。2、时间复杂度:0(n)数据压缩存储栈,其操作主要有:建立栈intPush(SeqStack*S,charx)入栈intPop(SeqStack*S,charx)出栈。以上各操作运算的平均时间复杂度为0(n),其主要时间是消耗在输入操作。六:测试用例如下图。最终结果如下图:表达式结果是:-66继续运算请接Y/y退由程序请按N/n七、源代码第七题算术表达式求值问题描述一个算术袤达式是由操作数(OPerand)、运算符(OPeratOr)和界限符(delim计ej组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#",如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。根本要求(1)从键盘读入一个合法的算术表达式,输出正确的结果。(2)显示输入序列和栈的变化过程。#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<conio.h>#include<ctype.h># defineOK1# defineERROR0# defineSTACKNIT_SIZE100/#defineSTACKINCREMENT10/=/以下定义两种栈,分别存放运算符和数字/=IIit/戋3jstructSqStack定义栈(char*base;/栈底指针char*top;栈顶指针intstacksize;栈的长度);intInitStack(SqStack&s)建立一个空栈Sif(l(s.base=(char*)malloc(50*sizeof(char)exit(O);s.top=s.base;s.stacksize=50;returnOK;)charGetTop(SqStacks,char&e)运算符取栈顶元素if(s.top=s.base)栈为空的时候返回ERRORPrintf("运算符栈为空!俏;returnERROR;)elsee=*(s.top-1);栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OKreturnOK;)intPush(SqStack&s,chare)运算符入栈if(s.top-s.base>=s.stacksize)Printf("运算符栈满!n”);s.base=(char*)realloc(s.base,(s.stacksize+5)*sizeof(char);栈满的时候,追加5个存储空间if(s.base)exit(OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=5;)*(s.top)+=e;把e入栈returnOK;)intPop(SqStack&s,char&e)运算符出栈(if(s.top=s.base)栈为空栈的时候,返回ERRoR(Printf("运算符栈为空!n)returnERROR;)elsee=*-s.top;栈不为空的时候用e做返回值,删除S的栈顶元素,并返回OKreturnOK;)intStackTraverse(SqStack&s)运算符栈的遍历char*t;t=s.base;if(s.top=s.base)Printf(“运算符栈为空!n”);栈为空栈的时候返回ERRORreturnERROR;while(t!=s.top)printf('%c',*t);栈不为空的时候依次取出栈内元素t+;)returnERROR;)y*-P*structSqStackn定义数栈int int int);*base;栈底指针*top;栈顶指针stacksize;栈的长度intInitStackn(SqStackn&s)/建立一个空栈Ss.base=(int*)malloc(50*sizeof(int);if(!s.base)exit(OVERFLOW);存储分配失败s.top=s.base;s.stacksize=50;returnOK;)intGetTopn(SqStackns,int&e)数栈取栈顶元素if(s.top=s.base)Primf("运算数栈为空!n");栈为空的时候返回ERRORreturnERROR;)

    注意事项

    本文(数据结构课程设计-表达式求值【完整版】.docx)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 1wenmi网站版权所有

    经营许可证编号:宁ICP备2022001189号-1

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!

    收起
    展开