网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构课程设计之利用栈求表达式的值.docx

数据结构课程设计之利用栈求表达式的值.docx

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计之利用栈求表达式的值

**大学数据结构课程设计报告题目:利用栈求表达式的值院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2011、6、30指导教师: 20XX—20XX年度第 2 学期一、需求分析1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符,则返回错误信息。3、若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。程序中应主要包含下面几个功能函数:void initstack():初始化堆栈 int Make_str():语法检查并计算 int push_operate(int operate):将操作码压入堆栈 int push_num(double num):将操作数压入堆栈 int procede(int operate):处理操作码 int change_opnd(int operate):将字符型操作码转换成优先级 int push_opnd(int operate):将操作码压入堆栈 int pop_opnd():将操作码弹出堆栈 int caculate(int cur_opnd):简单计算+,-,*,/ double pop_num():弹出操作数二、概要设计定义一个expression全局表达式结构体expr[1000]存放计算过的表达式(expstr[MAXSIZE])和计算结果(result)、一个计量器(i)、一个表达式字符串、一个操作码栈和一个操作数栈;把表达式字符串从头到尾逐一扫描,将输入的表达式进行语法检查;第一个字符只能是数字或“(”,最重一个字符只能是“=”;表达式括号必须配对,中间不能出现“=”;在“(”前面只能是“+、-、*、/、( ”,在“+、-、*、/、=、)”前面只能是数字或“)”;把表达式字符串从头到尾逐一扫描,直到表达式扫描完毕,操作码栈为空;把字符根据运算优先级别选择操作;把表达式中的数值部分字符串转成数值压入操作数栈;是“(”直接压入到操作码栈,级别比操作码栈顶元素高的,把运算符压入操作码栈;级别比操作码栈低的,弹出操作码栈的栈顶元素和操作数栈的两个栈顶元素,进行运算后再压入操作数栈;是“)”,若操作码栈顶是“(”,把弹出操作码栈顶元素,否则“)”视为级别最低的元素,重复7;最后计算出结果并将其存放在expr[i],计量器加1;重复计算后,将结果保存在文件里,并统计计算次数;查看多次计算结果,以表形式输出;查看本次计算记录,以表形式输出;清除计算记录,重新计算三、详细设计程序总共有如下函数:主要函数:void start(opnd *op,num *nu)//程序主菜单void start2(opnd *op,num *nu)//第二层计算选择,子菜单void load()//显示所有计算记录void save()//保存计算结果void check()//显示本次计算结果void result(opnd *op,num *nu)//计算结果double caculate(opnd *op,num *nu)//简单计算+,-,*,/表达式处理函数:int make_str()//语法检查double change_num(char str[])//数字字符串转成double型数字char procede(char top,char code)//处理操作码,判断栈的操作int change_opnd(char code)//字符型操作码转换优先级,非表达式字符返回-2栈操作函数:double get_num(num *nu)//查看操作数栈栈顶double pop_num(num *nu)//操作数栈出栈int push_num(num *nu,double da)//压入操作数栈int empty_num(num *nu)//判空void initstack(num *nu)char get_opnd(opnd *op)//查看栈顶char pop_opnd(opnd *op)//出栈int push_opnd(opnd *op,char co)//压栈int empty_opnd(opnd *op)//判空void initstack(opnd *op)//初始化栈函数间的调用关系:main():主函数→ start();↗load() →start();start()程序模式函数→清空文件→exit();↘make_str()→result(op,nu)→start2()→start();↗ load → start();start2()子菜单→ save() → start2();↘ c

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档