博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(栈的应用)中序表达式转换成后序表达式问题
阅读量:3951 次
发布时间:2019-05-24

本文共 851 字,大约阅读时间需要 2 分钟。

中序表达转换成后序表达式的方法:

从左到右读取该中序表达式: 1.若是操作数,则直接输出. 2.若是运算符: (1)若该运算符为"(",则直接入栈. (2)若该运算符为")",则取出堆栈中的运算符,直到"("时. (3)其它: 按优先级比较,如果大于或等于堆栈中当前的运算则压入栈中,否则直接输出. (4)检查栈是否非空,如果非空,则输出所有值,直到空为止.

*、/、%的优先级当然比+、-高了

例如:中序表达式(23+34*45/(5+6+7))转换成后序表达式23 34 45 * 5 6 + 7 + / +

后序表达式用处:

当转换成后序表达式后更方便计算表达式的值,如将后序表达式的元素依次进栈直到遇到运算符,这时候从栈中弹出两个元素,再结合运算符计算出这两个数运算的结果(如34*45=1530),将其结果压栈(此时栈元素为23 1530),然后继续将后序非符号元素压栈,直到遇到运算符。重复之前的操作。。。

InfixExp(中序表达式)转换PostfixExp(后序表达式)算法:

1)当输入的是操作数时候,直接输出到后序表达式PostfixExp序列中

2)当输入开括号时候,把它压栈

3)当输入的是闭括号时候,先判断栈是否为空,若为空,则发生错误并进行相关处理。若非空,把栈中元素依次弹出并输出到Postfix中,知道遇到第一个开括号,若没有遇到开括号,也发生错误,进行相关处理

4)当输入是运算符op(+、- 、×、/)时候

a)循环,当(栈非空and栈顶不是开括号and栈顶运算符的优先级不低于输入的运算符的优先级)时,反复操作:将栈顶元素弹出并添加到Postfix中

b)把输入的运算符op压栈

5)当中序表达式InfixExp的符号序列全部读入后,若栈内扔有元素,把他们依次弹出并放到后序表达式PostfixExp序列尾部。若弹出的元素遇到空括号,则说明不匹配,发生错误,并进行相关处理

我自己画的能理解的就理解QAQ

在这里插入图片描述

看到最后的帮忙点个👍🙏 谢谢,这个对我真的很重要!
在这里插入图片描述

转载地址:http://kqqwi.baihongyu.com/

你可能感兴趣的文章
在VC6集成环境中开发设备驱动程序的方法
查看>>
如何进行软件需求分析
查看>>
有关数据挖掘的10个常见问题
查看>>
电信数据挖掘
查看>>
电信数据挖掘之流失管理
查看>>
电信运营商如何进行客户细分
查看>>
c++名库介绍
查看>>
boost1.43在win7下的编译
查看>>
VC++工程如何脱离VSS环境
查看>>
转 hook 自绘原理
查看>>
NSIS 脚本介绍
查看>>
记录通讯日志的函数
查看>>
c++ 标准容器介绍与对比
查看>>
web DB优化思路
查看>>
敏捷笔记
查看>>
SOA业务理解与应用
查看>>
Google File System(中文翻译)
查看>>
Google's BigTable 原理 (翻译)
查看>>
MapReduce:超大机群上的简单数据处理
查看>>
设计模式笔记(转载)
查看>>