中缀表达式转换为后缀表达式的算法

1、从左而右对算数表达式进行扫描,每次读入一个字符s1[i];

2、若遇到数字或小数点,则立即写入s2[i],若遇算数运算符,将“ ”(空格)写入s2[i];

3、遇到左括号“(”则压栈;

4、若遇算术运算符,如果它们的优先级比栈顶元素高,则直接进栈,否则弹出栈顶元素输出到s2[i],直到新栈顶元素的优先级比它低,然后将它压栈;

5、若遇到右括号“)”,则将栈顶元素输出到s2[i],直到栈顶元素为“(”,然后相互抵消;当扫描到“#”符号,表明表达式串已全部输入,将栈中的运算符全部输出到s2[i],并删除栈顶元素。

 1 int is_op(char op)
 2  {
 3    switch(op)
 4   { case ‘+‘:
 5     case ‘-‘:
 6     case ‘*‘:
 7     case ‘/‘:return 1;
 8     default:return 0;
 9     }
10  }
11 /****************************/
12 /*   判断运算符的优先级     */
13 /****************************/
14 int priority(char op)
15    {
16      switch(op)
17        {
18           case ‘(‘:return 0;
19           case ‘+‘:
20           case ‘-‘:return 1;
21           case ‘*‘:
22           case ‘/‘:return 2;
23         default: return -1;
24         }
25   }
26
27 /*********************************/
28 /*中缀表达式,转换为后缀表达式   */
29 /*********************************/
30 void postfix(char e[],char f[])
31  {seqstack opst;
32   int i,j;
33   initstack(&opst);
34   push(&opst,‘\0‘);
35   i=j=0;
36   while (e[i]!=‘\0‘)
37    { if ((e[i]>=‘0‘ && e[i]<=‘9‘) || e[i]==‘.‘)
38            f[j++]=e[i];                     /*数字*/
39       else if (e[i]==‘(‘)                /*左括号*/
40                push(&opst,e[i]);
41            else if (e[i]==‘)‘)           /*右括号*/
42               { while (stacktop(&opst)!=‘(‘)
43                         f[j++]=pop(&opst);
44                   pop(&opst);            /*‘(‘出栈*/
45                }
46            else if (is_op(e[i]))         /* ‘+ ,-, *, /‘ */
47                   {f[j++]=‘ ‘;           /*用空格分开两个操作数*/
48                    while (priority(stacktop(&opst))>=priority(e[i]))
49                        f[j++]=pop(&opst);
50
51                    push(&opst,e[i]);     /*当前元进栈*/
52                    }
53        i++;  /*处理下一元*/
54     }
55
56     while (!stackempty(&opst))
57         f[j++]=pop(&opst);
58     f[j]=‘\0‘;
59   }
时间: 2025-01-18 12:05:38

中缀表达式转换为后缀表达式的算法的相关文章

将中缀表达式转换为后缀表达式,然后利用栈对表达式求值。

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js.js"></script> </head> <body> 输入中缀表达式空格分隔 例如 2 + 3 <input type=

中缀表达式转换为后缀表达式(1042)

描述 中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法.后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *.利用栈结构,将中缀表达式转换为后缀表达式.(测试数据元素为单个字符) input 中缀表达式 output 后缀表达式 样例输入 A+(B-C/D)*E 样例输出 ABCD/-E

练习3.20 a 将中缀表达式转换为后缀表达式

//将中缀表达式转换为后缀表达式 int main() { int MaxSize = 10; int str[8]={3,3,2,1,0,1,0,2}; char tmp; PtrToStack s; s = CreateStack( MaxSize ); while(1) { tmp = getchar(); if(tmp == '\n') break; if(tmp == ' ') continue; else if(tmp == '+' || tmp == '-' || tmp == '

数据结构Java实现06----中缀表达式转换为后缀表达式

数据结构Java实现06----中缀表达式转换为后缀表达式 本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则),如:2 1 + 3 *.又比如3+(6-4/2)*5=23的后缀表达式为:3642/-5*+# (#符号为结束符

Java版 中缀表达式转换为后缀表达式并求结果

基础知识 平时我们所说的一个算术表达式,例如:9+(3-1)*3+10/2即为中缀表达式,然而计算机无法计算中缀表达式的值,这是因为计算机无法进行带有左右括号和运算符的优先级这种混合运算.后缀表达式(又称 逆波兰式)的使用解决了上述问题. 上述的算术表达式的后缀表达式为:9 3 1 - 3 * + 10 2 / + 算法思想 如何计算上述后缀表达式的结果呢? 答案:从左到右扫描上述后缀表达式,然后: 1. 遇到数字入栈 2. 遇到运算符 将栈顶的前两个元素出栈,然后计算结果,并将计算的结果入栈

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

[转]中缀转换为后缀表达式 一.后缀表达式求值 后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储.假定待求值的后缀表达式为:6  5  2  3  + 8 * + 3  +  *,则其求值过程如下: 1)遍历表达式,遇到的数字首先放入栈中,此时栈如下所示: 2)接着读到"+",则弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中. 3)读到8,将其直接放入栈中. 4)读到"*",弹出8和5,执行8*5,并将结果40压入栈中.而后过程类似,读到&quo

中缀表达式转换为后缀表达式(python实现)

中缀表示式转换为后缀表达式 需要一个存放操作符的栈op_stack,输出结果的列表output 步骤: 从左到右遍历表达式: 1. 若是数字,直接加入到output 2. 若是操作符,比较该操作符和op_stack中操作符的优先级,若优先级大于op_stack中的,则压入到op_stack中 否则,将op_stack中优先级大于或等于该操作符优先级的所有操作符加入到output中,然后压入op_stack中 3. 若是左括号,压入到op_stack中 4. 若是右括号,将op_stack中所有左

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

算法叫逆波兰表达式逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出.逆波兰表达式又叫做后缀表达式.这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子: 正常的表达式 逆波兰表达式 a+b ---> a,b,+ a+(b-c) ---> a,b,c,-,+ a+(b-c)d ---> a,d,b,c,-,,+ a=1+3 ---> a=1,3 + http=(smtp+http+telnet)/1024 写成什么呢? http=smtp,http,tel

栈的应用之中缀表达式转后缀表达式

1,中缀表达式的定义及为什么要将中缀表达式转换为后缀表达式? 中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间.中缀表达式是人们常用的算术表示方法. 虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值.对计算机来说,计算前缀或后缀表达式的值要比中缀表达式简单. 比如,计算机计算后缀表达式的过程如下----后缀表达式的计算机求值: 从左