精华内容
下载资源
问答
  • C语言中缀表达式

    2012-06-29 01:32:36
    计算中缀表达式的值,用到了树,堆栈的概念,是一次上机实验作业
  • c语言中缀表达式计算

    2015-01-03 18:15:23
    利用c语言写的中缀表达式,主要数据结构是栈。
  • 中缀表达式就是我们日常常见到的表达式如图 它是由操作数,运算符,界限符组成的。 大家都知道中缀表达式的运算顺序先算乘除再算加减,从左到右,如果由括号则先算括号里面的,当我们把界限符去掉之后是这样子的 ...

    定义

    中缀表达式就是我们日常常见到的表达式如图
    在这里插入图片描述
    它是由操作数运算符界限符组成的。
    大家都知道中缀表达式的运算顺序先算乘除再算加减,从左到右,如果由括号则先算括号里面的,当我们把界限符去掉之后是这样子的
    在这里插入图片描述
    整个式子的运算顺序完全被改变了,怎么办呢?我们可以利用后缀表达式来把界限符去掉

    后缀表达式

    后缀表达式就是把运算符放到操作数的后面
    例如:
    1+2转换成后缀表达式12+
    1-2转换成后缀表达式12-注意:操作数的顺序不能改变
    1+2*5/7转换成后缀表达式125*7/+注意:我们先把2*5转换成后缀表达式25*,然后把**25***看成一个整体

    展开全文
  • 中缀表达式转换为后缀表达式 最近在复习考研,C语言+数据结构,在此记录实验代码,仅供参考 #include <stdio.h> #include <string.h> int yxj(char p,char q) //判断运算符优先级 { if((p == '+' || p...

    中缀表达式转换为后缀表达式

    最近在复习考研,C语言+数据结构,在此记录实验代码,仅供参考

    #include <stdio.h>
    #include <string.h>
    
    int yxj(char p,char q)             //判断运算符优先级
    {
        if((p == '+' || p == '-') && (q == '*' || q == '/'))
        {
            return 0;
        }
        else {
            if(p == q)
            {
                return 0;
            }
            else {
                return 1;
            }
        }
    }
    
    int main()
    {
        char str[15] = "(a+b*c)/d-e",stack[100];
        int top = -1;
        char *p = str;
    
        while(*p != '\0')
        {
            if(*p >= 'a' && *p <= 'z')
            {
                printf("%c",*p);
            }
            else {
                if(*p == '(' || *p == '[' || *p == '{')
                {
                    stack[++top] = *p;
                }
                else {
                    if(*p == ')')
                    {
                        while(stack[top] != '(' && stack[top] != '[' && stack[top] != '{')
                        {
                            printf("%c",stack[top--]);
                            stack[top + 1] = ' ';
                        }
                        if(stack[top] != '(')
                        {
                            printf("括号不匹配!");
                            return 0;
                        }
                        else {
                            top--;
                            stack[top + 1] = ' ';
                        }
                    }
    
                    if(yxj(*p,stack[top]))
                    {
                        stack[++top] = *p;
                    }
                    else {
                         printf("%c",stack[top--]);
                         stack[top] = *p;
                    }
                }
            }
            p++;
        }
    
        while(stack[top] == '+' || stack[top] == '-' || stack[top] == '*' || stack[top] == '/')
        {
            printf("%c",stack[top--]);
        }
    
        if(top != -1)
        {
            printf("括号不匹配!");
        }
    
        return 0;
    }
    
    
    展开全文
  • 一、目的理解中缀表达式求值的过程理解中缀转后缀表达式求值的过程掌握堆栈的应用二、问题描述缀表达式,其中包含括号,加减乘除,乘方等运算,利用中缀表达式,对表达式分析并求值入的中缀表达式转换为后缀形式,...

    一、目的

    • 理解中缀表达式求值的过程
    • 理解中缀转后缀表达式求值的过程
    • 掌握堆栈的应用

    二、问题描述

    • 缀表达式,其中包含括号,加减乘除,乘方等运算,利用中缀表达式,对表达式分析并求值
    • 入的中缀表达式转换为后缀形式,显示后缀形式,并通过后缀形式求值

    三、数据结构

    1. //运算符结构体
    2. typedef struct
    3. {
    4. char OPname; //存储运算符
    5. int inOP; //存储栈内级别
    6. int outOP; //存储栈外级别
    7. }OP;
    8. //定义运算数栈
    9. typedef struct
    10. {
    11. datatype data[MAXSIZE];
    12. int top;
    13. }SeqStack;
    14. //定义运算符栈
    15. typedef struct
    16. {
    17. char data[MAXSIZE];
    18. int top;
    19. }charStack;
    20. //----------------定义运算符数组-----------------//
    21. OP OPPree[OPNUM] =
    22. {
    23. {'+',3,2},
    24. {'-',3,2},
    25. {'*',5,4},
    26. {'/',5,4},
    27. {'^',7,6},
    28. {'(',1,8},
    29. {')',0,1},
    30. {'#',-1,-1}
    31. };

    四、算法设计的思想描述

    建立两个栈,一个为char类型栈OPTR,另一个为int类型栈OPND,分别来存储运算符和运算数。

    96136238a4ad7695024caa0011153d0d.png

    a86ac6e3395a771c79ff959e4d95290c.png

    参考文档和完整的文档和源码下载地址:

    https://www.write-bug.com/article/1409.html

    展开全文
  • (一)逆波兰表达式介绍:表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作数的中间,这称为中缀表达式(Infix Expression),如A+B。波兰数学家Jan Lukasiewicz提出...

    (一)逆波兰表达式介绍:

    表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作数的中间,这称为中缀表达式(Infix Expression),如A+B。

    波兰数学家Jan Lukasiewicz提出了另一种数学表示法,它有两种表示形式:

    把运算符写在操作数之前,称为波兰表达式(Polish Expression)或前缀表达式(Prefix Expression),如+AB;把运算符写在操作数之后,称为逆波兰表达式(Reverse Polish Expression)或后缀表达式(Suffix Expression),如AB+;前后缀表达式的出现是为了方便计算机处理,它的运算符是按照一定的顺序出现,所以求值过程中并不需要使用括号来指定运算顺序,也不需要考虑运算符号(比如加减乘除)的优先级。

    先介绍中简单的人工转化方法:

    假设有一个中缀表达式a+b*c-(d+e):

    1. 首先将这个中缀表达式的所有运算加括号((a+(b*c))-(d+e))
    2. 然后将所有运算符放到括号后面,这样就变成了((a(bc)* )+ (de)+ )-
    3. 把所有括号去掉abc*+de+-,最后得出的结果就是后缀表达式。

    (二)算法

    一、 将中缀表达式转换成后缀表达式算法:

    从左到右遍历中缀表达式的每一个数字和符号,若是数字就输出即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级(没有括号,乘除优先于加减),是右括号或优先级低于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最后输出后缀表达式为止。

    单把优先级低于栈顶符号,则栈顶元素依次出栈并输出这句话截取出来如何思考?这样做的结果优先级高的将更靠近操作数,在后缀表达式进行求值的时候,就会被先计算;其实后缀表达式已经把优先级蕴含在顺序中了。

    二、逆波兰表达式求值算法:

    1、循环扫描语法单元的项目。

    2、如果扫描的项目是操作数,则将其压入操作数堆栈,并扫描下一个项目。

    3、如果扫描的项目是一个二元运算符,则对栈的顶上两个操作数执行该运算。

    4、如果扫描的项目是一个一元运算符,则对栈的最顶上操作数执行该运算。

    5、将运算结果重新压入堆栈。

    6、重复步骤2-5,堆栈中即为结果值。

    二、将中缀表达式转换成前缀表达式算法:

    从右到左遍历中缀表达式的每一个数字和符号,若是数字就输出即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级(没有括号,乘除优先于加减),是左括号或优先级高于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最后输出前缀表达式为止。

    二、波兰表达式求值算法:

      1、从右到左依次扫描语法单元的项目。

      2、如果扫描的项目是操作数,则将其压入操作数堆栈,并扫描下一个项目。

      3、如果扫描的项目是一个二元运算符,则对栈的顶上两个操作数执行该运算。

      4、如果扫描的项目是一个一元运算符,则对栈的最顶上操作数执行该运算。

      5、将运算结果重新压入堆栈。

      6、重复步骤2-5,堆栈中即为结果值。

    8774f3d5a3d0ba00f983dce9dc07a398.png

    (三)代码实现:

    package 
    展开全文
  • C语言中缀表达式求值(综合)

    千次阅读 多人点赞 2019-04-13 10:59:06
    基本思路:先把输入的中缀表达式→后缀表达式→进行计算得出结果 栈:”先进先出,先进后出“! 中缀转后缀(先把转换后的后缀表达式存入字符数组):从左至右依次读取,遇到运算数存入字符数组,遇到运算符压入栈...
  • 数据结构作业 中 中缀表达式转换为后缀表达式 主要是对栈的应用 第一次上传 呵呵 没经验
  • C语言中,将中缀表达式转成后缀表达式,并计算它的结果,具体的思路如下: 1、定义两个栈,numStack用于存放运算对象,最后存放运算结果的,fuStack用于存放运算符号的 2、从左到右遍历字符串 3、如果当前的字符是...
  • 在标准的四则混合运算表达式中(或者我们称之为中缀表达式),遇到一个操作符是不能直接计算的,因为计算的顺序要取决于后面的运算符。多举几个例子,大家就能明白了。由于加和减是相同的运算优先级,乘和除是相同的...
  • 接下来就为大家讲解一下这份由iMindMap制作的C语言表达式思维导图。C语言表达式一共有五块内容。一、算术运算符顾名思义,算术运算符就是我们在进行算式计算时使用到的运算符。图片1:算术运算符在C语言中,根据参与...
  • C的基本程序步骤由语句 (statements) 组成,而大多数语句都由表达式 expression) 构成。因此,我们先学习表达式。 1 表达式表达式(expression)由运算符和运算对象组成。最简单的表达式是一个单独的运算对象,以此为...
  • C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如: 3+5,6+8称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为 表达式1,表达式2逗号表达式的求解过程是:先求解表达式1...
  • 前言 最近开始刷题,真实地解决了大学时期“这黑窗口敲来敲去做数学题有卵用?...前缀、中缀以及后缀表达式是什么? 先聚合一下定义,以后万一要复习也好找XD前缀表达式 波兰表示法(Polish notation...
  • 表达式表达式是由运算符和操作数组合构造成。最简单的表达式是一个单独的操作数,以此作为基础,结合语言自身支持的操作符,就可以建立复杂的表达式。下面是一些表达式:从这里可以看到,操作数可以是数据常量(4,-5...
  • 什么是表达式?计算机如何表达和计算一个算术表达式?搞懂了这个问题,我们也就弄清楚了如何去解析一...表示一个算术表达式的方法通常有三种,前缀表达式,也称为波兰表达式、中缀表达式,也就是我们人类常用的这种...
  • 中缀表达式转前缀表达式2.中缀表达式转后缀表达式实现过程:3. 递归:递归产生的问题:1.括号匹配问题栈例题1算法思想:1)初始一个空栈,顺序读入括号。若是右括号,则与栈顶元素进行匹配·若匹配,则弹出栈顶元素并...
  • 从书上看到的讲起最近(半年内 )在看《大话数据结构》,上个星期在栈这一节看到了后缀表达式用于...后缀表达式求值规则(《大话数据结构》)中缀转后缀规则(《大话数据结构》)当尝试了之后发现,上面的描述没有...
  • C语言中缀表达式转化为后缀表达式

    千次阅读 2018-12-12 17:18:51
    #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;stdbool.h&gt; //别靠空想!!!及其浪费时间!!!多谢谢伪代码分析一下!......
  • C语言提供了一组逻辑运算符:或(||)、且(&&)、非(!),分别对应于命题逻辑中的 OR、AND、NOT运算。逻辑运算符:或 ||。在命题逻辑中,当P=1或Q=1时,P||Q等于1。逻辑运算符:且 &&。在命题逻辑中,当...
  • 题目如下程序,如何实现数据测试以及输出:学前...如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+(a+b)*c-(a+b)/e的后缀表达式为:(a+b)*c-(a+b)/e→((a+b)*c)((a+b)/e)-→((a+b)c*)((a+b)e/)-→(ab+...
  • 算法,表达式求值后缀表达式求值介绍后缀表达式求值和上一节的“中缀表达式转换为后缀表达式”有所不同,在对后缀表达式进行从左至右的扫描过程当中,由于操作符在操作数的后面,所以要找一个容器把操作数暂时存放...
  •  最后得到的结果就是 一个反向的 后缀表达式 */ #include #include #include typedef double DateType; typedef char SymbolType; typedef struct RpnNode{ SymbolType symol; DateType data; ...
  • //存储中缀表达式中的数字,以及中缀表达式中的符号,在szz中分别用80001,80002,80003,80004,80005表示 ’+’ ’-‘ ‘*’ ‘/’ ’%’ int jieguo [ 50 ] ; //中缀表达式求值中的堆栈 int wuyong [ 50 ] ...
  • 前言最近开始刷题,真实地解决了大学时期“这黑窗口敲来敲去做数学题有卵用?...前缀、中缀以及后缀表达式是什么?先聚合一下定义,以后万一要复习也好找XD前缀表达式波兰表示法(Polish notation,或波兰记法),...
  • 1.数制转换数值进位制的换算是计算机实现计算和处理的基本问题。比如将十进制数m转换为n进制的数,最常用的算法是除n取余法。这种方法是将十进制数m每次除以n,直到商为0时为止。将所得的余数依次进栈,然后按“后进...
  • 表达式是由运算符(包括括号)、操作数(常量、变量、函数等,是一个操作符操作于其上的数)按照一定的规则组成的式子;可以将常量、变量和函数认为是最简单的表达式表达式可以嵌套,每个表达式都有一个值。在计算时要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 396
精华内容 158
关键字:

c语言中缀表达式

c语言 订阅