将中缀表达式转换为前缀表达式:
将中缀表达式转换为前缀表达式:
遵循以下步骤:
(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;
(2) 从右至左扫描中缀表达式;
(3) 遇到操作数时,将其压入S2;
(4) 遇到运算符时,比较其与S1栈顶运算符的优先级:
(4-1) 如果S1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈;
(4-2) 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入S1;
(4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较;
(5) 遇到括号时:
(5-1) 如果是右括号“)”,则直接压入S1;
(5-2) 如果是左括号“(”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到右括号为止,此时将这一对括号丢弃;
(6) 重复步骤(2)至(5),直到表达式的最左边;
(7) 将S1中剩余的运算符依次弹出并压入S2;
(8) 依次弹出S2中的元素并输出,结果即为中缀表达式对应的前缀表达式。例如,将中缀表达式“1+((2+3)×4)-5”转换为前缀表达式的过程如下:
扫描到的元素 |
S2(栈底->栈顶) |
S1 (栈底->栈顶) |
说明 |
5 |
5 |
空 |
数字,直接入栈 |
- |
5 |
- |
S1为空,运算符直接入栈 |
) |
5 |
- ) |
右括号直接入栈 |
4 |
5 4 |
- ) |
数字直接入栈 |
× |
5 4 |
- ) × |
S1栈顶是右括号,直接入栈 |
) |
5 4 |
- ) × ) |
右括号直接入栈 |
3 |
5 4 3 |
- ) × ) |
数字 |
+ |
5 4 3 |
- ) × ) + |
S1栈顶是右括号,直接入栈 |
2 |
5 4 3 2 |
- ) × ) + |
数字 |
( |
5 4 3 2 + |
- ) × |
左括号,弹出运算符直至遇到右括号 |
( |
5 4 3 2 + × |
- |
同上 |
+ |
5 4 3 2 + × |
- + |
优先级与-相同,入栈 |
1 |
5 4 3 2 + × 1 |
- + |
数字 |
到达最左端 |
5 4 3 2 + × 1 + - |
空 |
S1中剩余的运算符 |
转载于:https://www.cnblogs.com/leijiangtao/p/3505871.html
将中缀表达式转换为前缀表达式:相关推荐
- 中缀表达式转换为前缀表达式(lisp实现)
使用weight.opcode和infix_to_prefix三个函数实现中缀表达式到前缀表达式的转换. 算符优先级函数weight 首先定义函数weight,它返回一个算术运算符(可简称为算符)的优 ...
- 中缀表达式转换为前缀及后缀表达式并求值【摘】
它们都是对表达式的记法,因此也被称为前缀记法.中缀记法和后缀记法.它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前:中缀和后缀同理. 举例: (3 + 4) ...
- java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...
本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...
- 数据结构 - 拓展突破(C++实现中缀表达式转前缀表达式,中缀表达式转后缀表达式,前缀表达式求值,中缀表达式求值)
文章目录 1. C++中缀表达式转后缀表达式 2. C++中缀表达式转前缀表达式 3. C++后缀表达式求值 4. C++前缀表达式求值 1. C++中缀表达式转后缀表达式 输入中缀表达式样例: 2+ ...
- 逆波兰表达式中缀表达式转换为后缀表达式
中缀表达式转换为后缀表达式 思路分析 代码实现 package com.atguigu.stack;import javax.swing.plaf.nimbus.State; import java. ...
- 中缀表达式到前缀表达式和后缀表达式
1.算法思路 转化为后缀:从左到右遍历中缀表达式,遇到操作数,输出,遇到操作符,当前操作符的优先级大于栈顶操作符优先级,进栈,否则,弹出栈顶优先级大于等于当前操作符的操作符,当前操作符进栈. ...
- 表达式计算:后缀表达式求解 以及 中缀表达式转换为后缀表达式
后缀表达式 后缀表达式格式: 不包含括号,运算符放在两个运算对象的后面. 后缀表达式运算规则: (从左向右) 所有计算均按运算符出现的顺序(不再考虑乘除优先于加减这种运算符的优先规则),严格从左向右进 ...
- 利用stack结构,将中缀表达式转换为后缀表达式并求值的算法实现
#!/usr/bin/env python # -*- coding: utf-8 -*-# learn <<Problem Solving with Algorithms and Dat ...
- swust oj 1042: 中缀表达式转换为后缀表达式
题目描述 中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法.后缀表达式不包含括号,运算符放在两个运算对象的后面,所 ...
- 【数据结构】中缀表达式转前缀表达式求值
中缀表达式转前缀表达式求值 首先将中缀表达式转换成前缀表达式 前缀表达式中,操作符在前 例如:1+2*(5-3)+4 后缀表达式:++1*2-534 一.转换思路 转换思路为将输入的中缀表达式字符串从 ...
最新文章
- 程序员自学到底有没有用?网友们吵翻了...
- 2021-07-12 深度学习服务器网络测试(顶会ECCV网络测试)
- ruby require的使用
- python界面长什么样子-图形界面
- 上传的镜像无法用来启动云主机
- mongodb学习篇
- 多个Activity关闭问题
- 贴纸效果_(新)AE插件:时尚印刷贴纸效果动画帽子眼镜胡须嘴唇图标社交标题库(3001)...
- Java笔记-Spring中RabbitMQ的调用
- 一文读懂YOLOv5 与 YOLOv4
- 日本人的幼儿教育,看一看还是有意…
- CSS布局讲解-float浮动布局使用
- Linux内核源代码分析-第二章 代码初识-2
- Spring父子上下文(WebApplicationContext)(防止事务失效)
- Unity粒子特效工具需求文档
- 外点惩罚函数法matlab程序例子,外点罚函数优化实例.doc
- 您尝试安装的Adobe Flash Player版本不是最新版本解决办法
- 华为员工魂丧非洲【转发】
- java gc 监控_JAVA网站full GC监控脚本
- react实现echarts的疫情地图
热门文章
- 链表 -- 2.2.1 Add Two Numbers -- 图解
- false在python什么意思_python – `x [False]`在numpy中做什么?
- Java I/O系统之InputStream
- [渝粤教育] 武汉理工大学 数字信号处理 参考 资料
- HashMap和HashSet的区别?
- Master-Worker设计模式介绍
- Node.js:连接 MySQL
- [转]Java杂谈(六)
- Codeforces.741D.Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree 思路)
- LeetCode -- Merge Two Sorted Linked List