数据结构与算法-(7)---栈的应用-(4)后缀表达式求值

news/2024/10/23 5:42:10/

🌈write in front🌈
🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
📝个人主页:Aileen_0v0🧸—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
🗼我的格言:"没有罗马,那就自己创造罗马~" 

目录

 回顾

后缀表达式运算过程

后缀表达式求值思路及代码流程



 回顾💫

之前我们学习了栈的应用之前,后缀表达式的转换,如有遗忘,点击👉🔗http://t.csdnimg.cn/PodbC

今天我们来学习-后缀表达式求值 问题

跟中缀转换为后缀问题不同

对后缀表达式来说 ,从左到右扫描的过程中,

由于操作符在操作数后面,

所以要暂存操作数,在碰到操作符时,再将两个暂存操作数进行实际计算

这个过程利用的就是栈的特性:操作符只作用于离他最近的两个操作数.


后缀表达式运算过程🍁


后缀表达式,又称逆波兰式,不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则),非常方便计算机的计算。

后缀表达式的计算过程如下:
1️⃣从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈
2️⃣重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

计算后缀表达式的动态流程如下,以1+2-3*2的后缀表达式为例:

最后得到的结果 - 3 还要 push 回栈顶


后缀表达式求值思路及代码流程🍂

1.首先创建空栈operandStack 用于 暂存操作数

2.将后缀表达式 用split方法解析为单词(token) 的列表

3.从左到右扫描单词列表

   如果单词是一个操作数,将单词转换为整型int,压入operandStack 栈顶

   如果单词是一个操作符 (* / + - ) , 就开始求值, 从 栈顶弹出2个操作数,先弹出的是右操作数,     后弹出的是左操作数,计算后将值重新压入栈顶.

4.单词列表扫描结束后,表达式的值就在栈顶

5.弹出栈顶的值,返回.

class Stack:#Stack---->ADTdef __init__(self):self.items =[]def isEmpty(self):return self.items == []# 满足这些属性(行为)的是栈def push(self,item):self.items.append(item)def pop(self):return self.items.pop()def peek(self):return self.items[len(self.items)-1]#def size(self):return len(self.items)def postfixEval(postfixExpr):operandStack = Stack()tokenList = postfixExpr.split()for token in tokenList:if token in "0123456789":operandStack.push(int(token))else:operand2 = operandStack.pop()operand1 = operandStack.pop()result = doMath(token,operand1,operand2)operandStack.push(result)return operandStack.pop()def doMath(op, op1, op2):if op == "*":return op1 * op2elif op == "/":return op1 / op2elif op == "+":return op1 + op2else:return op1 - op2

通过调用得到的运行结果: 


http://www.ppmy.cn/news/1138566.html

相关文章

tkinter中如何隐藏/去掉最大化窗口

在Tkinter中,去掉最大化窗口的按钮是无法实现的,因为这是Tkinter内置的特性。 #我的Python教程 #官方微信公众号:wdPython然而,你可以通过禁用窗口的最大化和最小化按钮来隐藏它们。 import tkinter as tk from tkinter impor…

Python3操作Redis最新版|CRUD基本操作(保姆级)

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 Win11查看安装的Python路…

acwing算法基础之基础算法--高精度加法算法

目录 1 知识点2 模板 1 知识点 大整数 大整数,它们的长度都为 1 0 6 10^6 106。大整数是指长度为 1 0 6 10^6 106的整数。 大整数 - 大整数 大整数 * 小整数 大整数 / 小整数 把大整数存储到向量中,需要考虑高位在前还是低位在前,低位在前…

简单两步实现离线部署ChatGPT,ChatGPT平替版,无需GPU离线搭建ChatGPT

文末附主程序安装包和大模型参数文件~ 演示效果如下图所示: 一、使用方法 软件主要分为两个部分:GPT4ALL软件主体(主程序)模型参数(离线模型),如果使用API Key的话则不需要下载模型参数。 可以…

高效使用Python的subprocess模块:基本用法与进阶技巧

文章目录 Python的subprocess模块参数和方法的用法subprocess.run、subprocess.check_call 和 subprocess.Popen的区别如何使用`subprocess`实现一些功能执行系统命令并获取输出通过管道执行多个命令在后台运行进程一些额外的`subprocess`模块技巧超时功能错误处理输入/输出重定…

Go语言中的指针介绍

Go语言中的指针 文章目录 Go语言中的指针一、Go语言中的指针介绍1.1 指针介绍1.2 基本语法1.3 声明和初始化1.4 Go 指针的3个重要概念1.4.1 指针地址(Pointer Address)1.4.2 指针类型(Pointer Type)1.4.3 指针取值(Poi…

Folium 笔记:MarkerCluster

在一张地图上以聚簇的形式显示大量的标记(markers) 举例: import folium from folium.plugins import MarkerCluster import randomm folium.Map(location[45.5236, -122.6750], zoom_start13) # 创建一个基本的地图marker_cluster Marker…

在Linux中软链接和硬链接的区别是什么?

2023年10月6日,周五晚上 目录 软链接(SymbolicLink):硬链接(HardLink):区别: 软链接(SymbolicLink): 软链接本身只是一个指向其他文件或目录的指针,不占用任何磁盘空间。软链接的修改或删除不会影响原文件。软链接可以指向不同文件系统中的文件。 硬链接(HardLink…