首页
学习
活动
专区
圈层
工具
发布

利用栈计算后缀表达式

上篇笔记我们已经知道了后缀表达式以及他的计算方法,本篇我会用代码实现利用栈计算后缀表达式。 计算步骤 初始化一个空栈。...此栈用来对要运算的数字进出使用 如果遇到符号就把栈上的两个元素拿出来计算然后再压栈 遇到数字就压栈,遇到符号就出栈两个数字然后计算 直到表达式结束 代码实现 #include #include...= '-' || c == '*' || c == '/') { return true; } return false; } PerformOperation函数是通过传入的操作符来计算栈上元素的...Isnumber判断参数是否是数字 IsOperator判断是否是操作符 整体逻辑 根据字符串从左面开始扫面(我这里用的是for循环你也可以用其他的循环) 如果是操作符,则pop栈顶两个元素进行运算...如果是数字,则把字符转成整数(因为后续要参加计算)并入栈,经过反复计算压栈,最后留在栈顶的就是我们要的结果。 eg:计算931-2*+52/+

31530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【CPP】栈,后缀表达式与计算

    我们平时计算时列的计算式叫做中缀表达式,即运算符放在两个运算数中间的计算式(例:1+1)。...但是,这样的式子计算机并不能很好的理解,在遇到有括号加入时就会更难进行编程,于是在这样的需求下,另一种计算式被发明了:后缀表达式。...用移动的p_now指针来标识栈顶的位置。 接下来的重点,是如何将中缀表达式转化为后缀表达式。...首先,我们初始化两个栈,一个用于存放转换完成的式子(目标栈),另一个用于暂时存放操作符(操作符栈),并用一个字符指针来扫描字符串,用一个int来表示目前的扫描状态。 ?...这样我们便完成了转换中缀表达式的步骤了。然后就是如何计算后缀表达式呢。

    1.3K20

    利用栈实现中缀表达式计算

    如下图 根据用户输入的表达式,得出计算结果 思路分析 本题看似简单,实则不然,要实现这个功能我们不能简单的直接将这个字符串丢给程序 如下 int a = 7*2*2-5+1-5*3-3 // 3...我们要模拟计算机是如何解析,并计算出这样一个字符串的结果。...则直接入符号栈 4.当表达式遍历完毕时,就顺序的从数栈和符号栈中pop出相应的数和符号,并进行运算 5.最后数栈中只有一个数字,即最后的结果 图示 如下例计算 3+2*6-2 第一次扫描时,发现是数字,...,我们还得给栈添加几个方法 1.查看栈顶中的元素 2.计算符号优先级 3.判断是否为运算符 4.计算方法 ......,就顺序的从数栈和符号栈中pop出相应的数和符号进行计算 while (true){ //当符号栈为空时,说明计算到最后的结果了,数栈中只有一个数字即结果

    66010

    C语言-用栈实现表达式求值(顺序栈)

    (In) 表达式求值函数(evaluateExpression) 其他:操作符栈(OPTR),操作数栈(OPND) ---- 谈谈我遇到的问题: 1.该选择数字栈还是字符栈?...运算数是整型,而运算符是字符型,若选用字符栈,存入操作数时只能以‘0’–‘9’的字符形式存入,那么意味着无法存取两位以上的数字,也无法运算两位以上的数字,因为运算过程中的中间值超过两位也将无法转化成字符形态入栈计算...用gets(str);或者scanf进行字符串读入表达式后,存储方式如下: 多位数的存储方式: 我们可以通过str[i]进行逐位的访问,通过i++;实现逐位的偏移,那么就可以写成str...此时我们就成功的用归并将34读取入栈 ,接下来再看4位的数5473如何读取,首先X1读取5,归并至X2(第一次归并,此时X1=5;X2=5),接着让X1读取4,识别到X1是数字,归并至X2(第二次归并,...此算法用于计算整型,若要计算浮点数,把相应的类型更换成double即可实现。 算法运算逻辑是先以字符型读入字符数组中,再将字符型转换为整型存入数字栈中。

    2.2K10

    【程序填空】表达式计算(栈应用)C++

    题目描述 使用C++自带的stack栈模板来实现四则运算表达式求值 算法描述参考第3.2.5节 算法伪代码参考P53-54的算法3.4 例如 1....Pop(OPND, a); 表示弹出栈OPND的栈顶元素,并把栈顶元素放入变量a中。...(); 大家主要是改造表达式求值函数EvaluateExpression的代码 输入 第一个输入t,表示有t个实例 第二行起,每行输入一个表达式,每个表达式末尾带#表示结束 输入t行 输出 每行输出一个表达式的计算结果...,计算结果用浮点数(含2位小数)的格式表示 参考代码如下: #include #include using namespace std; int main...- ),那么需要开始计算这个运算符前面的数值,即两次弹出操作数栈栈顶元素用来计算,计算的运算符是当前运算符栈顶元素。

    29530

    栈的应用----算术表达式计算问题(中缀转后缀,后缀计算)

    栈的应用----算术表达式计算问题(中缀转后缀,后缀计算) 问题引入:算术表达式计算是编译系统中的一个基本问题,其实现方法是堆栈的一个典型应用。任何一个算术表达式都是由操作数、运算符和分界符组成的。...算术表达式的计算分为两步: 中缀表达式转为后缀表达式 后缀表达式的计算。...4.计算过程 二、后缀表达式的计算 1.算法思想: 设置一个堆栈存放操作数,从左至右依次扫描后缀算术表达式,每读到一个操作数就将其进栈,每读到一个运算符就从栈顶取出两个操作数施以改运算符所代表的运算操作...,并把该运算结果作为一个新的操作数入栈,此过程一直进行到后缀算术表达式读完,最后栈顶的操作数就是改后缀算数表达式的运算结果。...可以看到,上述的分析过程和结果都正确,其实熟悉编译原理的同学可以直接用“移进”和“规约动作”实现中缀算数表达式到后缀算数表达式的转换。

    2.2K20

    栈的应用中缀表达式转换为后缀表达式后缀表达式的计算

    中缀表达式转换为后缀表达式 后缀表达式 做数学运算时,经常使用的是中缀表达式,即“操作数 运算符 操作数”。在计算机处理的时候更习惯后缀表达式,即“操作数 操作数 运算符”。...例如a + b * c转换为后缀表达式a b c * +,使用栈可以将中缀表达式转换为后缀表达式,具体的方法为: 扫描到数字直接输出 扫描到运算符则与栈顶比较,若扫描到的运算符优先级低于或等于栈顶运算符的优先级...,则弹栈直到栈空或栈顶运算符优先级低于扫描到的运算符,之后运算符入栈;否则直接入栈。...base_stack.New_link_stack() topost := To_postfix{} topost.data_stack = link return &topost } 后缀表达式的计算...计算方法 后缀表达式的计算比较简单,顺序扫描整个后缀表达式: 若遇到数字,直接入栈 若遇到运算符,弹栈两次取出两个数字,按运算符运算,将结果再次入栈 这样扫描完整个后缀表达式之后,栈中就应该只有一个数

    1.6K70

    蓝桥杯算法系列---验证栈序列&&后缀表达式的计算(使用栈的思想)

    1.验证栈序列下面的这个就是我们的代码:1)两个for循环输入我们的所有的元素;2)st栈,通过循环让所有的元素全部进行这个入站的操作,但是出栈的时候不一定只有一个元素,因此这个出栈的这个需要使用whilee...循环进行控制;j可以理解为控制我们的这个出栈序列的指针,没有走到最后一个元素的时候,这个指针就会一直向后面去移动当我们的这个栈里面存在元素,指针没有走到最后,并且我们的指针指向的元素的等于我们的栈顶元素的时候...b[j]){st.pop();j++;}}if (st.size()) cout 表达式题目...:1)逆波兰表达式求数值问题;2)所有的数值元素按顺序入站,遇到操作符,出栈两个元素,并且这个顺序也是非常的重要的,第一个出栈的元素是我们的第二个操作数,第一个出栈的元素是我们的第一个操作数,这个结果放到这个站里面去...,直到全部的表达式遍历结束即可;3)乘以10+ch实际上是对于这个字符串求解具体数值的过程;4)不是@,不是点,说明就是操作数,这个直接取出来两个栈顶元素,第一个弹出来的元素是第二个操作数,我们使用b表示即可

    18000

    Leetcode:用队列实现栈,用栈实现队列

    //下面的栈都是用C语言写的,为使用STL // 链式结构:表示队列 typedef int QDataType; typedef struct QListNode { struct QListNode...* int param_3 = myStackTop(obj); * bool param_4 = myStackEmpty(obj); * myStackFree(obj); */ 用栈实现队列...思路: 首先创建两个栈,一个栈用来入队列,一个栈用来出队列,出队列时,如果出队列的栈为空,则将入队列的栈中的元素弹出到出队列的栈再出队列,否则,直接出栈。...//栈为用 C语言所写 //栈只能先进后出 //每个元素最后进出的相对顺序不唯一,可以边进边出 typedef int STDataType; typedef struct Stack { int...* a; //存储栈内元素的数组 int top; // 标识栈顶位置的,代表栈顶元素的下一个位置(也可以代表是栈顶元素,但栈为空时top==-1) int capacity; }ST; void

    31410

    栈的应用——表达式求值

    概要 表达式求值问题可以说是一个经典问题。具体思路就是首先把输入的中缀表达式转换为后缀表达式,然后再根据后缀表达式进行计算求值。...---- 中缀表达式转换为后缀表达式 首先我们设定运算符在进栈前与进栈后的优先级: ? 首先在栈把“#”进行压栈,并在中缀表达式追加“#”。“#”作为结束标志。...对中缀表达式进行遍历,遇到数字进行输出到后缀表达式中 如果遇到运算符,把栈顶的元素(前者)的栈内优先级与即将入栈元素(后者)的栈外优先级进行比较,如前者小,则运算符入栈,否则,则把栈顶元素(前者)出栈并输出到后缀表达式中...---- 后缀表达式求值 对后缀表达式进行遍历,如果是数字就入栈,如果是运算符,就连续出栈两次的结果进行保存,之后进行相应运算,把运算结果入栈,直至遍历结束,结果为栈顶元素。...); return after; } }; //这是后缀表达式计算类 class Sum{ private: int* sum

    78310

    计算XPath表达式

    XPath(XML路径语言)是一种基于XML的表达式语言,用于从XML文档获取数据。使用类中的%XML.XPATH.Document,可以轻松地计算XPath表达式(给定提供的任意XML文档)。...对于此方法,需要指定节点上下文和要计算的表达式。节点上下文指定要在其中计算表达式的上下文。这使用XPath语法来表示到所需节点的路径。例如:"/staff/doc"要计算的表达式还使用XPath语法。...计算XPath表达式要计算XPath表达式,请使用%XML.XPATH.Document实例的EvaluateExpression()方法。...Auriemma 计算具有子树结果的XPath表达式/// 计算返回DOM Result的XPath表达式ClassMethod Example1(){...XPath表达式下面的类方法读取XML文件并计算返回标量结果的XPath表达式:/// 计算返回值结果的XPath表达式/// d ##class(PHA.TEST.Xml).Example2("E:\

    2.2K20
    领券