首页 > 其他分享 >(转载)数据结构-01-图解后缀表达式值计算方式

(转载)数据结构-01-图解后缀表达式值计算方式

时间:2024-05-13 13:18:57浏览次数:12  
标签:01 中缀 进栈 后缀 数据结构 个栈 计算结果 图解 表达式

目录:

1.简介

问题:

我们平常使用的数学表达式大多数是“中缀表达式”例如:9+(3-1)×3+10÷2,对人比较友好,但是这个对计算机计算并不友好,因为计算机无法智能判断运算顺序的问题(比如说乘法加法等优先级和括号等)

解决方案:

20世纪50年代,波兰逻辑学家Jan·ukasiewicz,想到了不需要判断顺序的数学表达式,这就是后缀表达式(也称之为逆波兰表达式

2.图解后缀表达式计算方式

规则:遍历后缀表达式的每个元素,
1.遇到数字就进栈,
2.遇到符号就将栈顶的2个元素出栈,然后将计算结果进栈。(下面的例子会帮助你理解)

 

下面是计算后缀表达式"9 3 1-3*+10 2/+"(原始中缀表达式是 9+(3-1)×3+10÷2,后面一节将会介绍中缀转后缀的教程)

 

初始化一个空栈
1.因为前面3个数字(9,3,1)都是数字,数字就进栈。
在这里插入图片描述

2.接着是 减号(-),符号就弹出2个栈顶元素计算结果,将结果后进栈
在这里插入图片描述
3.同理2.点数字就进栈
在这里插入图片描述

 4.接着是乘号(*),符号就弹出2个栈顶元素计算结果,将结果后进栈
在这里插入图片描述
5.接着是加号(+),符号就弹出2个栈顶元素计算结果,将结果后进栈
在这里插入图片描述
6.接着是10,数字就进栈
在这里插入图片描述

7.接着是除法(/),符号就弹出2个栈顶元素计算结果,将结果后进栈
在这里插入图片描述
8.接着是加法(+),符号就弹出2个栈顶元素计算结果,将结果后进栈
在这里插入图片描述
9.最后遍历结束,将最后的栈元素返回结果

 

 

3.代码实现

我将会在接下来的章节实现
1.中缀表达式转后缀表达式
2.计算后缀表达式的值
到时候代码会放到总代码里面.

    转自:https://blog.csdn.net/jarvan5/article/details/109206706

标签:01,中缀,进栈,后缀,数据结构,个栈,计算结果,图解,表达式
From: https://www.cnblogs.com/didiao233/p/18189019

相关文章

  • C120 树剖+李超树 P4069 [SDOI2016] 游戏
    视频链接:C120树剖+李超树P4069[SDOI2016]游戏_哔哩哔哩_bilibili    D12LuoguP3384【模板】轻重链剖分/树链剖分-董晓-博客园(cnblogs.com) LuoguP4069[SDOI2016]游戏//树剖+李超树O(nlognlognlogn)#include<iostream>#include<cstring>#in......
  • 洛谷题单指南-动态规划3-P3205 [HNOI2010] 合唱队
    原题链接:https://www.luogu.com.cn/problem/P3205题意解读:给定理想队形,计算初始队形的方案数。解题思路:对于给定理想队形,最后一个人插入有两种可能:从左边插入、从右边插入从左边插入,则意味着前一个数比当前数大,前一个数有可能在左边也有可能在右边从右边插入,则意味着前一个数......
  • sqlserver2019安装
    说明:新版sqlserver安装分两部分:第一部分安装服务 第二部分安装管理工具 第一步:下载安装包 ed2k://|file|cn_office_professional_plus_2019_x86_x64_dvd_5e5be643.iso|3775004672|1E4FFA5240F21F60DC027F73F1C62FF4|/第二步:安装服务这里注意:    推荐第一种安......
  • c# datetime iso 8601 格式
    ......
  • pytest 学习 - 01 setup与teardown
    前言与unitest一样,python也拥有前置(setup)、后置操作(teardown)操作,而且更加的灵活setup与teardown介绍1.模块级别(setup_module/teardown_module)模块始末,全局的(优先最高)2.函数级(setup_function/teardown_function)只对函数用例生效(不在类中)3.类级(setup_class/teardown_c......
  • 数据结构学习笔记-先序遍历森林
    先序遍历森林问题描述:设计算法输出先序遍历的森林节点及其所在的层次【算法设计思想】1.数据结构定义首先,定义二叉树节点的数据结构。每个节点包含存储数据的data字段,以及指向左右子节点的指针(lChild和rChild)。这种数据结构是二叉树和森林表示的基础。2.先序遍历单棵树设......
  • 洛谷 P2824 [HEOI2016/TJOI2016] 排序(二分,线段树)
    传送门解题思路据说是经典思路:把多次排序转化成二分+01序列。首先二分所求位置的数字是啥,将大于mid的数字变成1,将小于等于mid的数字变成0。这样在排序的时候就相当于统计区间里的1的个数(区间和),然后区间全部变成0或者1。也就是区间修改,区间求和,线段树可以实现。AC代码#inclu......
  • 画布canvas基础 01
    1.什么是canvascanvas是用来绘制图形的.它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。<canvaswidth="500"height="500">当前的浏览器版本不支持,请升级浏览器</canvas>判断浏览器是否支持画布cnavascanvas的标签属性只有两个,width和heig......
  • 数据结构学习笔记-递归求解森林高度
    森林的高度递归求解问题描述:设计算法求解森林的高度【算法设计思想】两个函数,一个用于计算单个二叉树的高度,另一个用于计算二叉树森林(即一组二叉树)的最大高度。下面是对两个函数的详细解释:1.treeHeight函数这个函数用于计算单个二叉树的高度。二叉树的高度定义为从根节点到......
  • TheAlgorithms/C - 各种基础算法、数据结构的 C 语言实现+armink/SFUD - 一款基于 JED
    1、OpenMV-RT-基于恩智浦i.MXRT系列的开源机器视觉AI模块OpenMV-RT是一款基于恩智浦最近主打的i.MXRT超高性能系列MCU的视觉模块,模块设计者是恩智浦大牛工程师宋岩(对,就是ARMCortex-M3权威指南中文版作者)。模块源代码: https://github.com/RockySong/micropython......