逆波兰表达式求值实报告湖大.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
逆波兰表达式求值实报告湖大

HUNAN UNIVERSITY 课程实习报告 题 目: 逆波兰表达式求值 学生姓名 范舜奕 学生学号 20100820608 专业班级 通信6班 指导老师 吴帆 完 成 日 期 2012.04. 07 实验二 逆波兰表达式求值 ★问题描述 选一个后缀表达式,利用堆栈来计算该表达式的值,同时要效验后缀表达式是否正确 基本要求 (1)从键盘中输入一个后缀表达式,该表达式包括加减乘除的操作符,一级正整数作为操作数等 (2)用堆栈来表示 ★输入输出格式 输入:在字符界面上输入一个后缀表达式,其中两相邻操作数之间利用空格隔开。以“#”表示结束。 输出:如果该后缀表达式正确,那么在字符界面上输出其结果,计算结果小数点后面保留两位有效数字。如果不正确,请在字符界面上输出表达式错误提示 测试用例 输入:2 3 * 1 -# 输出:5 设计思路 ◆为了测试需要,应以浮点数存储输入和输出,利用堆栈来实现算法。栈的抽象数据类型的定义如下: ADT Stack? { ?? 数据对象:D={a | a i ∈ElemSet, i=1,2,...,n, n≥0 } ?? 数据关系:R={a , a i | a i-1?,a i∈D, i=2,...,n} ?? 基本操作: (S) ????操作结果:} ADT LinkLiSt ◆本程序包含三个基本模块 (1)主程序模块: (2)线性表模块:实现的抽象数据类型 (3)元素结构单元模块:定义每个元素的结构 通过switch_case结构判断输入运算符的种类,转而执行不同的处理代码。#include stdio.h #include string.h #include malloc.h #include stdlib.h #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OVERFLOW -2 typedef float SElemtype; typedef int Status; typedef struct { SElemtype * base; SElemtype * top; int stacksize; } SqStack; Status InitStack(SqStack S) { S.base = (SElemtype *)malloc(STACK_INIT_SIZE*sizeof(SElemtype)); if (! S.base) exit(OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } int StackLength(SqStack S) { return S.top - S.base; } Status Push(SqStack S, SElemtype e) { *S.top++ = e; return OK; } Status Pop(SqStack S, SElemtype e) { if (S.top == S.base) return ERROR; e = * -- S.top; return OK; } Status IsDigital(char ch) { if(ch=0ch=9) { return 1; //是数字字母 } return 0; //不是数字字母 } int EvalValue(char *ch, SqStack S) { int i=0; SElemtype result=0; char a; a=ch[i]; while(IsDigital(a)) { result=10*result+(int)(a-48); a=ch[++i]; } Push(S, result); return i; } void EvalExpr(char ch, SqStack S) { SElemtype oper1,oper2; i

文档评论(0)

chengben002424 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档