1 / 11
文档名称:

c 中缀表达式转成后缀表达式.doc

格式:doc   大小:138KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

c 中缀表达式转成后缀表达式.doc

上传人:86979448 2018/2/17 文件大小:138 KB

下载得到文件列表

c 中缀表达式转成后缀表达式.doc

相关文档

文档介绍

文档介绍:中缀表达式转后缀表达式C++代码
理论: (这部分很重要,看明白了,可以写出实现算法)
表达式的表示形式有中缀、前缀和后缀3中形式。中缀表达式按操作符的优先级进行计算(后面代码实现只包括+、-、*、\,小括号),即数学运算。后缀表达式中只有操作数和操作符。操作符在两个操作数之后。它的计算规则非常简单,严格按照从左到右的次序依次执行每一个操作。每遇到一个操作符,就将前面的两个数执行相应的操作。
由后缀表达式计算中缀表达式原理:计算机处理后缀表达式求值问题是比较方便的,即将遇到的操作数暂存于一个操作数栈中,凡是遇到操作数,便从栈中pop出两个操作数,并将结果存于操作数栈中,直到对后缀表达式中最后一个操作数处理完,最后压入栈中的数就是后最表达式的计算结果。
中缀表达式转换为等价的后缀表达式
中缀表达式不方便与计算机处理,通常要讲中缀表达式转换为一个与之等价的后缀表达式。等价是指两个表达式的计算顺序和计算结果完全相同。
中缀表达式:/(5*2+1)#
的等价后缀表达式是: 5 2 * 1 + /#
仔细观察这两个等价的表达式可知,操作数的出现次序是相同的,但运算符的出现次序是不同的。在后缀表达式中,运算符的出现次序是实际进行操作的次序;在中追表达式中,由于受到操作符的优先级和括号的影响,操作符出现次序与实际进行操作的次序很可能是不一样的。
算法描述:
将中缀表达式转换为等价的后缀表达式的过程要使用一个栈放“(”,具体可以按照下面的方式进行。
(1)从左到右一次扫描中缀表达式的每一个字符,如果是数字字符和圆点“.”则直接将它们写入后缀表达式中。
(2)如果遇到的是开括号“(”,则将它们压入一个操作符栈(不需要与栈顶操作符相比较),它表明一个新的计算层次的开始,在遇到和它匹配的闭括号“)”时,将栈中的元素弹出来并放入后缀表达式中,直到栈顶元素为“(”时,将栈顶元素“(”弹出(不需要加入后缀表达式),表明这一层括号内的操作处理完毕。
(3)如果遇到的是操作符,则将该操作符和操作符栈顶元素比较:
1、当所遇到的操作符的优先级小于或等于栈顶元素的优先级时,则取出栈顶元素放入后缀表式,
并弹出该栈顶元素,反复执行直到栈顶元素的优先级小于当前操作符的优先级;
2、当所遇到的操作符的优先级大于栈顶元素的优先级的时则将它压入栈中。
(4)重复上述步骤直到遇到中缀表达式的结束符标记“#”,弹出栈中的所有元素并放入后缀表达式中,转换结束。
[cpp] view plaincopy
//

#include <iostream>
using namespace std;

template <class ElemType> class MyStack
{
public:
const static int MAXSIZE =100;
ElemType data[MAXSIZE];
int top;

public:
void init(); // 初始化栈
bool empty(); // 判断栈是否为空
ElemType gettop(); // 读取栈顶元素(不出栈)
void push(ElemType x); // 进栈
ElemType pop(); // 出栈
};


template<class T> void MyStack<T>::init()
{
this->top = 0;
}

template<class T> bool MyStack<T>::empty()
{
return this->top == 0? true : false;
}

template<class T> T MyStack<T>::gettop()
{
if(empty())
{
cout << "栈为空!\n";
exit(1);
}
return this->data[this->top-1];
}

template<class T> void MyStack<T>::push(T x)
{
if(this->top == MAXSIZE)
{
cout << "栈已满!\n";
exit(1);
}
this->data[this->top] =x;
this->top ++;
}

template<class T> T MyStack<T>::pop()
{
if(this->empty())
{
cout

最近更新

设计一套呼叫中心的绩效管理方案。 5页

财务管理的基本理论 12页

轻钢龙骨石膏板隔墙专项施工方案 9页

部编版三年级语文下册期末试卷(含答案) 6页

金属非金属矿山(露天矿山)生产经营单位安全管.. 26页

陕西2023播音编导类专业基础课笔试统考调整 4页

风力发电厂实习报告5篇范文 16页

高一第二学期数学教学计划 13页

高考刷真题最佳方案简短高考刷真题最佳方案简.. 11页

《组织咨询》课件 35页

《资本运营概述》课件 25页

年度二位二通电磁阀竞争策略分析报告 90页

年度电子测量仪器市场分析及竞争策略分析报告.. 90页

中级会计实务课件(教学更 32页

人教版教学课件第1课时捕获光能的色素和结构 34页

三年级学生送给老师的元宵节祝福语汇总(91句).. 11页

人生生活名言20句 9页

让孩子学会大胆表现 10页

人生哲理下载9篇 19页

高一化学预习化学实验基本方法 11页

人教版小学六年级圆的认识课件 6页

蚯蚓和蟒蛇9篇 8页

惹人注目的近义词6篇 22页

全国老师统一的口头禅通用(44句) 29页

《宴会准备工作作业设计方案》 3页

《信息的传递和通信导学案》 2页

2024年全国高中数学联赛福建赛区预赛试题及参.. 12页

2023年河南省级普通高中学生学业水平考试生物.. 13页

《财经应用文写作》课程教学大纲 10页

经典碑帖《圣教序》史上最高清版本,赶紧收藏 37页