- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
l课程设计表达式求值
课程设计报告
课程名称: 数据结构课程设计 课程设计题目: 表达式求值问题 姓 名: 余明旭 系: 计算机科学与技术 专 业: 计算机科学与技术 年 级: 2010级 学 号: 100310236 指导教师: 陈老师 职 称: 学生
详细设计
此算法的基本思想:
首先置操作数栈OPS为空栈,表达式起始符“#”为运算符的栈底元素;依次读入表达式中每个字符,若是操作数则进栈,若是运算符则和OPF栈的栈顶运算符比较优先权作相应操作,直至整个表达式求值完毕(即OPF栈的栈顶元素和当前读入的字符均为“#”)
此算法的伪代码:
ElementType EvaluateExpression(char *exp)
{ 定义两个字符变量c和ch,c代表输入表达式中的字符,ch代表栈顶运算符;
定义字符指针 *p,*q,*temp;temp指向运算符后面的一个字符
double i=0,a=0,b=0;
将传入的实参赋给p,q;
定义一个运算符栈 OPF;
定义一个操作数栈 OPS;
调用函数InitStack()初始化栈OPS;
调用函数CInitCharStack()初始化栈OPF;
调用函数CPush(OPF,#)将#压入运算符栈;
c=*p;temp=p;p++;
if(第一个字符就为‘-’)
{
c=*p;temp=p;p++;
}
while(栈不为空或表达式没有结束)
{//进入最外层循环
if(不是运算符)//则解析数字字符串然后进操作数栈
{
整数部分m=0;
小数部分n=0;
while(没有遇到小数点并且为数字字符)
{ 解析整数部分m }
if(遇到小数点)
{ 解析小数部分
c=*p;
将p指针移到第一个出现的字符;
将q指针指向小数的最后一位;
while(p指针不指向’.’)
{
将p指向的字符转为小数n
p--;
}
p=q;
p++;
}
if(运算符为‘-’并且运算符前一个为‘(’或者为表达式的开始)
调用Push(OPS,-(m+n))将m+n的相反数入栈;
else
调用Push(OPS,m+n)将m+n入栈;
}数字进栈结束
else//是运算符时则进栈OPF
{ if(运算符为‘-’运算符前一个为‘(’)
{ c=*p;
temp=p;
p++;
}
else
{ 调用函数CGetTop(OPF,ch)得到OPF的栈顶元素;
switch(调用函数Precede(ch,c)判断栈顶元素与接收的字符的优生级别)
{
case 栈顶运算符优先权低:
调用函数CPush(OPF,c)将c入运算符栈;
接收下一个字符;
case 栈顶运算符优先权高:
运算符出栈得到ch;
数字栈连续出栈两次得到a,b ;
调用Operate(a,ch,b)并将结果入栈到数字栈;break;
case 优生权相等:脱括号并接收下一个字符;
调用CPop(OPF,ch)脱括号;接收下一个字符;
default:接收下一个字符;
}退出switch循环
}//else1
}//else2
}//退出最外层while循环
调用函数GetTop(OPS,i)得到栈顶元素i;
将两个栈消毁;
}EvaluateExpression函数结束
源代码
#includestdlib.h
# include stdio.h
# include string.h
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
typedef char ElemType;
typedef int Status;
typedef double ElementType;
typedef int Status;
# define STACK_INIT_SIZE 30
# define STACKINCREAMENT 10
# define NUMBER 30
typedef struct node{
ElementType data;
struct node *next;
}StackNode, *LinkStack;
void InitStack(LinkStack head){
head=(LinkSta
您可能关注的文档
- l诺基亚手机菜鸟问题解答大全.doc
- I在计算磁性的实例和讨论.doc
- I在设置幻灯片背景时.doc
- l诺基亚手机营销战略分析.doc
- I在语文教学中培养学生的感恩意识.doc
- I在语文教学中指导学生合作学习.doc
- I在读中眷注生命说课稿.doc
- I在语文教学中进行语言表达能力培养的初探.doc
- l诺基亚智能手机内存不足等问题的解决.doc
- I在课堂上怎样培养学生的注意力.doc
- 中国国家标准 GB/T 5211.9-2025颜料和体质颜料通用试验方法 第9部分:相同类型着色颜料耐光性的比较.pdf
- 《GB/T 5211.9-2025颜料和体质颜料通用试验方法 第9部分:相同类型着色颜料耐光性的比较》.pdf
- 《GB/T 37228-2025安全与韧性 应急管理 突发事件管理指南》.pdf
- GB/T 23724.3-2025起重机 检查 第3部分:塔式起重机.pdf
- 中国国家标准 GB/T 25163-2025防止儿童开启包装 可重新盖紧包装的要求与试验方法.pdf
- 《GB/T 25163-2025防止儿童开启包装 可重新盖紧包装的要求与试验方法》.pdf
- GB/T 16263.5-2025信息技术 ASN.1编码规则 第5部分:W3C XML模式定义到ASN.1的映射.pdf
- 中国国家标准 GB/T 16263.5-2025信息技术 ASN.1编码规则 第5部分:W3C XML模式定义到ASN.1的映射.pdf
- 《GB/T 16263.5-2025信息技术 ASN.1编码规则 第5部分:W3C XML模式定义到ASN.1的映射》.pdf
- GB/T 11349.2-2025机械振动与冲击 机械导纳的试验确定 第2部分:用激振器作单点平动激励测量.pdf
文档评论(0)