精华内容
下载资源
问答
  • 前缀表达式

    2020-08-23 14:31:14
    蓝桥杯试题算法训练前缀表达式 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”...

    蓝桥杯试题算法训练前缀表达式

    资源限制
    时间限制:1.0s 内存限制:512.0MB
    问题描述

    编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。

    输入格式:输入只有一行,即一个前缀表达式字符串。
      输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
      输入输出样例
    样例输入

    • 5 2
      样例输出
      7
    展开全文
  • 中缀表达式-------->前缀表达式 方法一:将操作操作的两个对象放在操作符的后边便可将中缀表达式构成前缀表达式,(将优先级高的操作符和操作数先结合,然后加上括号,最后输出的时候 ,把括号去了即可) 例1:a+b...
    中缀表达式-------->前缀表达式
    方法一:将操作操作的两个对象放在操作符的后边便可将中缀表达式构成前缀表达式,(将优先级高的操作符和操作数先结合,然后加上括号,最后输出的时候 ,把括号去了即可)
    例1:a+b*c  前缀:+(a(*bc)) ---》 +a*bc如图所示
    方法二:利用二叉树来解决;中缀表达式在二叉树中,运算符总是位于根节点的位置,如上图所示,前缀表达式则是将此二叉树进行前序遍历的结果:+a*bc


    前缀表达式--------》中缀表达式


    只要牢记一点,位于根节点上的永远都是运算符,按照这一点,最终便可构造出一个二叉树,其中序遍历结果便是中缀表达式
    展开全文
  • 5 求前缀表达式的值 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的...

    5 求前缀表达式的值

    算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。

    输入格式:

    输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。

    输出格式:

    输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。

    输入样例:

    + + 2 * 3 - 7 4 / 8 4
    

    输出样例:

    13.0
    
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <stack>
    #include <string>
    #include <cctype>
    #include<iomanip>
    using namespace std;
    int main(){
        stack<double> st;
        string s;
        getline(cin, s);
        for(int i = s.size() - 1; i >= 0; i--){
            if(isdigit(s[i])){
                double mul = 10, num = s[i] - '0';
                for(i--; i >= 0; i--){
                    if(isdigit(s[i])){
                        num += (s[i] - '0')* mul;
                        mul *= 10;
                    }else if(s[i] == '.'){
                        num /= mul;
                        mul = 1;
                    }else if(s[i] == '-'){
                        num = -num;
                    }else{
                        break;
                    }
                }
                st.push(num);
            }else if(s[i] != ' '){
                double num1, num2, num3;
                num1 = st.top();
                st.pop();
                num2 = st.top();
                st.pop();
                switch(s[i]){
                    case '+': num3 = num1 + num2; break;
                    case '-': num3 = num1 - num2; break;
                    case '*': num3 = num1 * num2; break;
                    case '/': 
                    {
                        if(num2 == 0){
                            cout << "ERROR";
                            return 0;
                        }
                        num3 = num1 / num2; 
                    }
                    
                }
                st.push(num3);
            }
        }
        cout << setiosflags(ios::fixed) << setprecision(1) << st.top();
        return 0; 
    }
    

    参考

    https://www.cnblogs.com/unixfy/p/3334025.html

    https://blog.csdn.net/qq_42175505/article/details/107439326

    展开全文
  • 前缀表达式 中缀表达式 后缀表达式
                   

    前缀表达式(波兰式)

    a+((b+c)*d)-e  => -+a*+bcde

    中缀表达式

    a+((b+c)*d)-e 

    后缀表达式(逆波兰式)

    a+((b+c)*d)-e  => abc+d*+e-

     

    前缀、中缀、后缀的转换过程

    方法一:可以将前缀和后缀都转换成中缀表达式树,再相互转换

    中缀表达式树使用链表较宜。

    * 前缀转中缀表达式树:对前缀字符串Str进行遍历,确定Str[1]符号为根节点,对2..n进行遍历,从左向右构建子树,对于Str[i]Str[i+1],如果Str[i-1]为符号,构建左右子树;Str[i-1]为变量,查找右孩子为空的祖先节点进行构建。可以借助栈或递归方式来完成。(中左右)

    * 后缀转中缀表达式树:对后缀字符串的逆序Str进行遍历,确定Str[1]符号为根节点,对2..n进行遍历,从右向左构建子树,对于Str[i]Str[i+1],如果Str[i-1]为符号,构建右左子树;Str[i-1]为变量,查找左孩子为空的祖先节点进行构建。可以借助栈或递归方式来完成。

    (中右左)

    中缀表达式树通过前序和后续遍历得到前缀表达式和后缀表达式。

     

    方法二:使用栈进行转换,栈的数据元素存放字符串。

     

    方法三:使用符号和字符两个栈。

    * 中缀转前缀:对中缀字符串Str从右向左遍历。

        1. Str[i]为字符,直接输入字符栈。

        2. Str[i]为运算符,与符号栈顶元素进行比较。大于等于栈顶符号优先级,push入符号栈;否则,pop栈顶符号并插入字符栈。

        3. Str[i]为括号。如果为右括号,直接插入符号栈;否则,弹出逐个弹出符号栈中的元素并插入字符栈,直到右括号为止。

        重复以上步骤至Str为空,弹出字符栈即为前缀表达式。

    * 中缀转后缀:对中缀字符串Str从左向右遍历。与中转前类似。

     

    未完待续。。。

               
    展开全文
  • 中缀表达式、前缀表达式及后缀表达式中缀表达式前缀表达式中缀转前缀过程后缀表达式中缀转后缀过程 中缀表达式 我们一般写的表达式就为中缀表达式,如:ab/c+d, a+bc+d 前缀表达式 前缀表达式就是按次序把需要先算的...
  • 前缀表达式_前缀

    2020-07-08 17:21:30
    前缀表达式 作者 克里斯·科耶尔 最近更新时间 2017年6月22日 翻译自: https://css-tricks.com/prefixr/前缀表达式
  • 前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值 ,即数学表达式的求职 中缀表达式 简介 中缀表达式就是常见的运算表达式,如(3+4)×5-6 前缀表达式 简介 前缀表达式又称波兰式,...
  • 中缀表达式、前缀表达式、后缀表达式 1)中缀表达式:操作运算符在操作数中间 (3+2)*4-6 2)前缀表达式:波兰式,操作运算符在操作数之前, 如-*+3246。 从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到...
  • 前缀表达式:从后往前扫,遇到操作数入栈、遇到字符时取两栈顶元素进行相应运算后结果入栈。 后缀表达式:与上类似,只是是从前往后扫。 求前缀表达式的值 (25 分) 算术表达式有前缀表示法、中缀表示法和后缀表示...
  • 前缀表达式 前缀表达式又称波兰式,前缀表达式的运算符位于操作符之前。 例:(3+4)*5-6对应的前缀表达式就是 - * + 3 4 5 6 如何将中缀表达式(3+4)*5-6转换成前缀表达式 - * + 3 4 5 6。 将中缀表达式转换为前缀...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,529
精华内容 2,211
关键字:

前缀表达式