- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用栈的方式实现表达式求值
一、程序设计任务
掌握栈的用法,实现表达式求值这一栈的典型应用问题:以字符序列的形式从终端输入语法正确的、不含变量的算术表达式,利用算符优先关系,实现对算术四则混合运算表达式求值。当用户输入一个合法的表达式后,能够返回正确的结果。能够计算的运算符包括:加、减、乘、除、括号 。
二、具体代码实现如下
#includeiostream.h
#includefstream.h
#includestring.h
#includestdlib.h
#includemath.h
#includecstdio //cstdio本来就只是将stdio.h的内容用C++的头文件形式表现出来。
#define NULL 0
typedef struct node //定义一个结点结构体
{
char date;
struct node *next;
}SNode;
SNode *InitStack()//初始化空链栈
{
SNode *top;
top=new SNode;//top=(SNode *)malloc(sizeof(SNode));
top-next=NULL;
return top;
}
void PushOptr(SNode *top,char x)//运算符进栈函数
{
SNode *p;
p=new SNode;
p-date=x;
p-next=top-next;
top-next=p;
}
char PopOptr(SNode *top)//运算符出栈函数
{
SNode *p;
char x;
if(top==NULL)
return NULL;
p=top-next;
x=p-date;
top-next=p-next;
delete p;
return x;
}
void PushOpnd(SNode *top,char x)//操作数进栈函数
{
SNode *p;
p=new SNode;
p-date=x;
p-next=top-next;
top-next=p;
}
char PopOpnd(SNode *top)//操作数出栈函数
{
SNode *p;
char x;
if(top==NULL)
return NULL;
p=top-next;
x=p-date;
top-next=p-next;
delete p;
return x;
}
char GetTop(SNode *top)//取栈顶元素
{
return (top-next)-date;
}
int In(char c)
{
int n;
switch(c)
{
case +:
case -:
case *:
case /:
case (:
case ):
case %:
case ^:
case #: n=1;break;
default : n=0;break;
}
return n;
}
char Precede(char x,char y) //符号优先级规则说明
{
int i,j;
int form[9][9]=
{
{1,1,-1,-1,-1,1,-1,-1,1},
{1,1,-1,-1,-1,1,-1,-1,1},
{1,1,1,1,-1,1,1,-1,1},
{1,1,1,1,-1,1,1,-1,1},
{-1,-1,-1,-1,-1,0,-1,-1,2},
{1,1,1,1,2,1,1,1,1},
{1,1,1,1,-1,1,1,-1,1},
{1,1,1,1,-1,1,1,1,1},
{-1,-1,-1,-1,-1,2,-1,-1,0}
}; //定义一个二维数组存放运算符优先级
switch(x)
{
case +:i=0;break;
case -:i=1;break;
case *:i=2;break;
case /:i=3;break;
case (:i=4;break;
case ):i=5;break;
case %:i=6;break;
case ^:i=7;break;
case #:i=8;break;
}
switch(y)
{
case +:j=0;break;
case -:j=1;break;
case *:j=2;break;
case /:j=3;break;
case (:j=
您可能关注的文档
- 现浇梁专项施工方案技术交底.doc
- 现浇混凝土梁板与剪力墙接茬施工质量控制标准.doc
- 现浇连续箱梁预压方案.doc
- 现磨豆浆技术 现磨豆浆加盟.doc
- 现行人民币汇率制度下外汇储备管理研究 业论文任务书、开题报告、中期检查表、指导教师评阅表、评阅人评阅表、答辩成绩表、成绩评审表、答辩记录表.doc
- 现货黄金投资 现货黄金投资计划书.doc
- 现货电子盘入门知识.doc
- 玻化微珠外墙保温技术安全交底.doc
- 现场流水线改善报告.ppt
- 玻璃成型机电控制系统设计.doc
- 2025年高二新学期工作计划 .pdf
- 2025年长沙文创艺术职业学院单招职业倾向性测试题库一套.docx
- 2025年长沙文创艺术职业学院单招职业倾向性测试题库及答案一套.docx
- 2025年长沙文创艺术职业学院单招职业倾向性测试题库及答案参考.docx
- 2025年长沙文创艺术职业学院单招职业倾向性测试题库a4版.docx
- 2025年长沙幼儿师范高等专科学校单招职业适应性测试题库完整.docx
- 2025年高二物理电磁感应知识点 .pdf
- 2025年长沙幼儿师范高等专科学校单招职业适应性测试题库及参考答案.docx
- 2025年长沙幼儿师范高等专科学校单招职业适应性测试题库及答案1套.docx
- 2025年长沙幼儿师范高等专科学校单招职业技能测试题库精编.docx
最近下载
- 2024-2025学年全国中学生天文知识竞赛考试题库(含答案).pdf VIP
- 2024届福建省莆田市高三第二次教学质量检测二模生物试卷.doc VIP
- 电梯维修及维护人员的安全知识与技能培训课件.pptx VIP
- 小学新教育实验实施方案(详细).docx
- 23中英文双语单片机车辆防碰撞外文文献翻译:基于超声波与单片机嵌入式系统开发集成应用的汽车防撞系统设计.doc VIP
- 八年级数学上册《分式》教案教材分析.pdf VIP
- 大华DSS5000系列-客户端操作手册-.docx
- 2013款上汽通用别克君越_汽车使用手册用户操作图解驾驶指南车主车辆说明书电子版.pdf
- 人教版数学二年级下册全册教学课件(2023年新教材).pptx
- 越人歌-钢琴伴奏谱.pdf
文档评论(0)