美文网首页
数据结构笔记-栈的应用-表达式转换问题

数据结构笔记-栈的应用-表达式转换问题

作者: Veahow | 来源:发表于2018-11-09 20:54 被阅读0次

关键字:表达式、中缀、前缀、后缀、波兰、逆波兰

概述

在数据结构中,栈有一个常见的应用就是计算机中表达式的计算。

基础知识

中缀表达式(我们常用的写法,通常运算符在中间)、前缀表达式(波兰表达式,通常运算符在前面)、后缀表达式(逆波兰表达式,通常运算符在后面)

掌握的算法

需要掌握的是:中缀→后缀、中缀→前缀、前缀→中缀、后缀→前缀,其中前缀和后缀转换为中缀即为计算机求值的过程。

中缀转换算法总结

比较

基本算法一致,加粗字体为需要注意的不同点。

中缀→前缀 中缀→后缀
1.从右到左扫描。 1.从左到右扫描。
2.设置两个空栈,一个为对象栈S1,一个为运算符栈S2(存放运算符)。 2.设置两个空栈,一个为对象栈S1,一个为运算符栈S2(存放运算符)。
3.扫描过程遇到数或者运算符: 3.扫描过程遇到数或者运算符:
(1)遇到数直接压入S1。 (1)遇到数直接压入S1。
(2)扫描遇到运算符时:若S2为空或者S2栈顶为右括号),扫描到的运算符直接压入S2;若扫描到的运算符优先级高于等于S2栈顶运算符,扫描到的运算符直接压入S2,否则(小于时)从S2弹出元素压入S1。直到将扫描到的运算符压入S2,(2)步骤结束。 (2)扫描遇到运算符时:若S2为空或者S2栈顶为左括号(,扫描到的运算符直接压入S2;若扫描到的运算符优先级高于S2栈顶运算符,扫描到的运算符直接压入S2,否则(小于等于时)从S2弹出元素压入S1。直到将扫描到的运算符压入S2,(2)步骤结束。
4.扫描过程遇到括号: 4.扫描过程遇到括号:
(1)遇到右括号),直接压入S2。 (1)遇到左括号(,直接压入S2。
(2)遇到左括号(,依次弹出S2元素并压入S1,直到S2栈顶为右括号),然后丢弃这一对括号。 (2)遇到右括号),依次弹出S2元素并压入S1,直到S2栈顶为左括号(,然后丢弃这一对括号。
5.重复3、4步骤直到扫描完毕。 5.重复3、4步骤直到扫描完毕。
6.依次弹出S2元素并压入S1。 6.依次弹出S2元素并压入S1。
7.弹出S1所有元素,输出序列即为转换的前缀表达式。 7.弹出S1所有元素,输出序列的逆序即为转换的后缀表达式。

不同点

  1. 扫描方向:前缀为右→左,后缀为左→右
  2. 扫描中运算符比较:前缀扫描的运算符优先级大于等于S2栈顶运算符即可,后缀只能够大于
  3. 扫描中括号判断:前缀为右括号),后缀为左括号(。这里很容易理解,从扫描方向来直观感受,前缀首先遇到的就是右括号),后缀首先遇到的就是左括号(。
  4. 栈输出序列与最终的表达式的关系:前缀相同,后缀为逆序

计算机求值算法总结

算法

通过一个栈进行运算,遇到运算符就弹出栈顶元素和次顶元素计算。

不同点

运算对象的顺序:前缀为栈顶元素+运算符+次顶元素,后缀为次顶元素+运算符+栈顶元素
记忆方法:缀为栈顶元素在缀为栈顶元素在

参考资料

相关文章

  • 数据结构笔记-栈的应用-表达式转换问题

    关键字:表达式、中缀、前缀、后缀、波兰、逆波兰 概述 在数据结构中,栈有一个常见的应用就是计算机中表达式的计算。 ...

  • 数据结构复习

    第三章 栈和队列 一 栈 栈的类型 顺序栈 链式栈 双向栈 栈的应用 数制转换 行编辑程序 迷宫求解 表达式求值:...

  • 数据结构入门(三)栈的应用

      在之前的两篇文章——数据结构入门(一)栈的实现和数据结构入门(二)栈的应用之数学表达式求值中,笔者分别介绍了“...

  • day04-栈

    栈 解决实际问题: 表达式的求职和转换(中缀表达式转后缀表达式) 二叉树的遍历 深度优先搜索 概念: 栈(stac...

  • 【数据结构】【C#】010-栈的应用:🌜🌛括号匹配

    C#数据结构:栈的应用:括号匹配问题 假设表达式中包含三种括号:圆括号、方括号和花括号,它们可互相嵌套,如 ( [...

  • 【数据结构】【C#】011-栈的应用:📟表达式求值

    C#数据结构:栈的应用:表达式求值 后缀表达式 在我们日常生活中所见表达式都是中缀表达式,如 “5*(3+7)-4...

  • 如何用数组来实现栈和队列

    Stack 栈是一种后入先出的数据结构,仅限定在栈顶进行插入和删除操作。栈结构的实际应用主要有数制转换、括号匹配、...

  • 文章结构 栈是什么 Java中的Stack源码分析 什么时候使用栈 应用实例:使用栈来解决表达式计算问题 1、栈是...

  • 表达式求值

    表达式求值时对数据结构中栈结构的灵活应用,对于一个表达式而言,它由操作数和运算符组合而成,我们现实中常见的表达式:...

  • 数据结构-栈的基本操作

    我与数据结构有个约会,带你领略不一样的数据结构! /*问题分析:栈和线性表的关联?栈(包括队列)是线性表的重要应用...

网友评论

      本文标题:数据结构笔记-栈的应用-表达式转换问题

      本文链接:https://www.haomeiwen.com/subject/uufaxqtx.html