IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 用栈数据结构对算数表达式求值的思想 -> 正文阅读

[数据结构与算法]用栈数据结构对算数表达式求值的思想

  • 问题描述

????????表达式求值是程序设计语言编译中的一个基本问题,是栈应用的一个典型例子。对于一个简单的算数表达式,假如它的操作数是整型常数,运算符有加减乘除四种运算符,界限符有左右括号、表达式起始符和表达式结束符(#)。那么,它应遵循算数四则运算的规则是:从左到右,先括号内,后括号外,先乘除后加减。

  • 算法分析

? ? ? ? 要对一个算数表达式求值,首先要了解算符(运算符和界限符)间的优先关系,即算数表达式的计算顺序,从而决定如何对表达式进行操作。对算数表达式进行扫描,任意两个相继出现的算符θ?和θ?之间的优先关系比较如表所示。


算符间的优先关系比较
+-*/#
+>><<<>>
->><<<>>
*>>>><>>
/>>>><>>
(<<<<<=-
)>>>>->>
#<<<<<-=

第一行表示θ?,第一列表示θ?,“-”表示此情况不存在

? ? ? ? 由表可知,θ?和θ?之间存在以下三种关系:

  1. ???????θ??> θ? :θ? 的优先级高于 θ? ,应执行θ? 对应的运算;
  2. ? ? ? ?θ? < θ? :? θ? 的优先级低于?θ? ,不执行任何运算,继续扫描下一运算符;
  3. ? ? ? ?θ? = θ? :? θ? 的优先级等于 θ? ,两者为左右括号或同为#。

????????要实现以上算符优先算法需使用两个栈,一个称作运算符栈(OPTR),用于存放运算符;另一个称作操作数栈(OPND),用于存放操作数或运算结果。算法的基本思想是:

  1. 初始化OPTR和OPND两个栈,并将表达式起始符“#”作为OPTR栈的栈底元素。
  2. 依次读入表达式中的每个字符,若是操作数则进OPND栈,若是运算符,则与OPTR栈的栈顶元素进行优先级比较,并执行相应的操作:
  • 若栈顶运算符的优先级低于刚读入的运算符(θ?<θ?),则刚读入的运算符进OPTR栈;
  • 若栈顶运算符的优先级与刚读入的运算符优先级相同(θ?=θ?),说明左右括号相遇,即将栈顶运算符(左括号)出栈;
  • 若栈顶运算符的优先级高于刚读入的运算符(θ?>θ?),则将栈顶运算符出栈送入θ,同时OPND栈弹出两个操作数a和b,对a和b执行θ运算并使运算结果进OPND栈。

? ?3. 当OPND栈的栈顶元素和当前读入字符均为“#”,整个表达式求值完毕,OPND栈的栈顶元素即为表达结果。

? ? ? ? 利用栈实现算数表达式 2*(35-10)+5 的过程如下表所示。

步骤12345678910111213
OPTR栈? #? #? #? ? *? #? ? * (?#? ?*(?#? ?*(? ?-?#? ?*(? -?#? ?*(? #? ? *?#?#? ?+?#? ?+#
OPND栈222?2 35?2 35?2 35 10?2 25?2 25505050? ?555
当前读入字符2*35-10++5##

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:40:49  更:2021-10-13 11:43:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:19:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码