首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    函数目录: 栈的基本操作: 创建栈并初始化(create) 入栈(push_in) 出栈(pop_out) 取栈顶元素(GetTop) 优先级函数(Precede) 求值函数(Operate) 判断操作符函数...(In) 表达式求值函数(evaluateExpression) 其他:操作符栈(OPTR),操作数栈(OPND) ---- 谈谈我遇到的问题: 1.该选择数字栈还是字符栈?...3.表达式输入方式的选取 输入方式1:请输入表达式:3*(5-2) 输入方式2: 请输入表达式: 3 * ( 5 — 2 ) 第一种输入方式是直接打出表达式进行整体输入,而第二种则是以一个一个的方式读入...在Operate求值函数中,当theta是除号时,先用 if 判断如果除数为0,则返回错误结果,否则进行除法运算。 8.在检测到输入的字符是非法字符时如何给出错误反馈?...printf("%s%d\n",exp,result); return 0; } 执行结果: ---- 参考: 数据结构(C语言第二版)——严蔚敏 栈的经典应用——yuluows 栈的应用(表达式求值

    1.9K10

    C++求值顺序

    因为虽然求值顺序的运算符而言,求值顺序就和优先级,以及结合律无关。...所以上面的式子是未定义的,即如果表达式指向并且修改了同一个对象,这样的行为就是未定义的 逻辑与&& 逻辑非|| 条件?: -逗号, 上面四种运算符明确规定了运算对象的求值顺序。...3.C++手册 几乎所有 C++ 运算符的求值顺序(包括函数调用表达式中的函数参数求值顺序和任何表达式中子表达式的求值顺序)都是未指定的。...编译器能以任何顺序求值,并可以在再次求值相同表达式时选择另一顺序。...4) 一旦函数执行开始,则在被调用函数完成前,不求值来自调用方函数的表达式(函数不能交错)。 5) 每个使用内建(非重载)运算符的下列四种表达式的求值中,表达式 a 的求值后有一个序列点。

    1.3K20

    表达式求值(1)

    表达式求值 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。...经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。 假设表达式可以简单定义为: 1. 一个正的十进制数 x 是一个表达式。 2. ...如果 x 和 y 是 表达式,则 函数min(x,y )也是表达式,其值为x,y 中的最小数。 3. 如果 x 和 y 是 表达式,则 函数max(x,y )也是表达式,其值为x,y 中的最大数。...4.如果 x 和 y 是 表达式,则 函数add(x,y )也是表达式,其值为x,y 之和。 例如, 表达式 max(add(1,2),7) 的值为 7。...输入第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10)  接下来有N行, 每行是一个字符串,表示待求值的表达式 (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不

    64420

    表达式求值(中缀转后缀及后缀表达式求值)

    中缀表达式转后缀表达式: 中缀表达式转后缀表达式遵循以下原则: 1.遇到操作数,直接输出; 2.栈为空时,遇到运算符,入栈; 3.遇到左括号,将其入栈; 4.遇到右括号,执行出栈操作,并将出栈的元素输出...在这里也就是弹出+输出,弹出(不输出: 遇到*,优先级高于栈顶+,将*入栈 遇到g,直接输出: : 此时已经没有新的字符了,依次出栈并输出操作直到栈为空: 因为后缀表达式求值过程较为简单...下面代码实现中缀转后缀以及后缀表达式求值: 使用的栈是自定义栈(自己实现的): //stack.h #define _CRT_SECURE_NO_WARNINGS 1 #include表达式求值 中缀表达式转后缀表达式: //prefixionToSuffix.cpp #...s.Empty()) { *tmp++ = s.Top(); s.Pop(); } } 后缀表达式求值: //SuffixToValue.cpp #include"Stack.h

    74420

    表达式求值问题(java)

    题目: 给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 注意: 数据保证给定的表达式合法。...题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)*(-(1+1)+2) 之类表达式均不会出现。 题目保证表达式中所有数字均为正整数。...题目保证表达式在中间计算过程以及结果中,均不超过 231−1231−1。...C++和Java中的整除默认是向零取整;Python中的整除//默认向下取整,因此Python的eval()函数中的整除也是向下取整,在本题中不能直接使用。...,1); map.put('*',2); map.put('/',2); char [] chars=br.readLine().toCharArray(); //接收表达式并转换成字符数组

    12610

    NYOJ-------表达式求值

    时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是...经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。 假设表达式可以简单定义为: 1.一个正的十进制数x是一个表达式。...2.如果x和y是表达式,则 函数min(x,y)也是表达式,其值为x,y 中的最小数。 3.如果x和y是表达式,则 函数max(x,y)也是表达式,其值为x,y 中的最大数。...4.如果x和y是表达式,则 函数add(x,y)也是表达式,其值为x,y 之和。 例如,表达式max(add(1,2),7)的值为7。...输入第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10) 接下来有N行, 每行是一个字符串,表示待求值的表达式 (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不 超过

    706100

    逆波兰表达式求值

    每个运算对象可以是整数,也可以是另一个逆波兰表达式。...2Fevaluate-reverse-polish-notation%2F) 示例1: 输入:tokens = "2","1","+","3","*"undefined 输出:9undefined 解释:该算式转化为常见的中缀算术表达式为...:((2 + 1) * 3) = 9 示例2: 输入:tokens = "4","13","5","/","+"undefined 输出:6undefined 解释:该算式转化为常见的中缀算术表达式为:...6","9","3","+","-11"," ","/"," ","17","+","5","+"undefined 输出:22undefined 解释:undefined 该算式转化为常见的中缀算术表达式为...内的整数 Java解法 思路: 逆波兰表示法就是为了让计算机方便计算使用的,本身就是通过用栈来存储操作数,遇到运算符进行弹出操作数运算再入栈,直到结束 注意踩坑,出栈时的操作数,先出的是被操作的,注意位置顺序

    97745

    逆波兰表达式求值

    每个运算对象可以是整数,也可以是另一个逆波兰表达式。...2Fevaluate-reverse-polish-notation%2F) 示例1: 输入:tokens = "2","1","+","3","*"undefined 输出:9undefined 解释:该算式转化为常见的中缀算术表达式为...:((2 + 1) * 3) = 9 示例2: 输入:tokens = "4","13","5","/","+"undefined 输出:6undefined 解释:该算式转化为常见的中缀算术表达式为:...6","9","3","+","-11"," ","/"," ","17","+","5","+"undefined 输出:22undefined 解释:undefined 该算式转化为常见的中缀算术表达式为...内的整数 Java解法 思路: 逆波兰表示法就是为了让计算机方便计算使用的,本身就是通过用栈来存储操作数,遇到运算符进行弹出操作数运算再入栈,直到结束 注意踩坑,出栈时的操作数,先出的是被操作的,注意位置顺序

    33220

    逆波兰表达式求值

    给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。...每个操作数(运算对象)都可以是一个整数或者另一个表达式。     两个整数之间的除法总是 向零截断 。     表达式中不含除零运算。     输入是一个根据逆波兰表示法表示的算术表达式。...题目分析 这道题首先要理解逆波兰表达式的运算规则【题目中已有提示】。逆波兰表达式就是把我们正常的中缀表达式转换为一种计算机方便实现运算的表达式。...逆波兰表达式的运算规则是:     当遇到一个运算符时,我们对最近访问的两个数字执行对应的操作,并且先访问的数字在运算符之后,后访问的数字在运算符之前。    ...代码 注意: Python中的除法运算应该对计算结果使用int()转化,而不能使用运算符//。因为后者是向下取整而不是向零取整,结果为负数时会有歧义。

    20030

    栈的应用——表达式求值

    概要 表达式求值问题可以说是一个经典问题。具体思路就是首先把输入的中缀表达式转换为后缀表达式,然后再根据后缀表达式进行计算求值。...---- 中缀表达式转换为后缀表达式 首先我们设定运算符在进栈前与进栈后的优先级: ? 首先在栈把“#”进行压栈,并在中缀表达式追加“#”。“#”作为结束标志。...---- 后缀表达式求值 对后缀表达式进行遍历,如果是数字就入栈,如果是运算符,就连续出栈两次的结果进行保存,之后进行相应运算,把运算结果入栈,直至遍历结束,结果为栈顶元素。...Transform{ private: char* str; int top; int size; public: //表达式求值的构造函数...class Sum{ private: int* sum; int top; int size; public: //表达式求值的构造函数

    64710
    领券