将中缀表达式6-8/4+3×5-(7-3)×8/(5-2)转为后缀表达式

屋檐下的鱼2022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
冒险龙骑 共回答了18个问题 | 采纳率88.9%
后缀表达式
  不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 *,即(2 + 1) * 3
1年前

相关推荐

中缀表达式A*B*C,后缀表达式是多少.初学者,
只碰1年前1
361525214 共回答了17个问题 | 采纳率88.2%
中缀表达式A*B*C,后缀表达式是:
AB*C*
把中缀表达式转换为后缀表达式的算法
把中缀表达式转换为后缀表达式的算法
我需要用html和javascript实现一个科学计算器的全部功能包括三角函数等常用函数,现在需要有把中缀表达式转换为后缀表达式的方法,希望有具体的解释,或者能提供教程也行.最好把计算机识别后缀表达式的原理解释一下,分数不多,不成敬意.
hy71711年前1
8fsp_com 共回答了15个问题 | 采纳率93.3%
include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MaxStackSize 100
#define M 100
typedef char DataType;
#include "SeqStack.h"
#include "implement.c"
/////////////////////////////计算表达式/////////////////////////////////
void EvaluateExpression(char *exp)
{
char c;
char theta;
char tmpc,a,b,y;
//char x,ch;
SeqStack OPTR; //运算符栈
SeqStack OPND; //操作数栈
//int s1,s2;
StackInitiate(&OPTR);
StackPush(&OPTR,'#');
StackInitiate(&OPND);

c=*exp++;
//printf("当前读取的字符为%cn",c);

StackTop(OPTR,&tmpc);
//printf("当前运算符栈顶字符为%cn",tmpc);
//printf("%c",tmpc);
while (c!='#'||tmpc!='#')
{
printf("进入循环,当前读取表达式的字符为%cn",c);
if(!IsOperator(c)) //如果获取的字符不是运算符则入操作数栈
{

printf("发现操作数n");
StackPush(&OPND,c);
c=*exp++;
//x=getchar();
}
else
{
printf("发现运算符n");
//StackTop(OPTR,&tmpc); //获取当前运算符栈顶字符
//printf("当前的运算符是:%cn",tmpc);
//ch=Precede(tmpc,c);
//printf("运算符是:%cn",ch);
switch(Precede(tmpc,c))
{
case '': //退栈并计算
//printf("栈顶元素优先级高:出栈n");

StackPop(&OPTR,&theta);
//printf("当前进行的运算是:");
//printf("%cn",theta);
StackPop(&OPND,&b); StackPop(&OPND,&a);
StackPush(&OPND, Operate(a,theta,b));

StackTop(OPTR,&theta); //获取一个运算符出栈之后的当前运算符栈顶,继续和此时读取的运算符比较
while(Precede(theta,c)=='>')
{


StackPop(&OPND,&b); StackPop(&OPND,&a);
StackPush(&OPND, Operate(a,theta,b));
StackPop(&OPTR,&theta); //将当前的栈顶弹出(刚刚比较过的运算符)
StackTop(OPTR,&theta); //获取当前新的栈顶
}
if(Precede(theta,c)=='=') //右括号始终不进栈,在此去除左括号.
{

StackPop(&OPTR,&theta); //将当前的栈顶弹出(刚刚比较过的运算符)
//StackTop(OPTR,&theta); //获取当前新的栈顶
}
if(c!='#'&&c!=')') //将所有栈内优先级高的运算完成(出栈)之后,将当前的运算符入栈
StackPush(&OPTR,c);

//StackTop(OPND,&y);
//printf("当前操作数栈顶为%cn",y);
//c=*exp++;
break;
}//switch
if(!StackEmpty(OPTR))
StackTop(OPTR,&tmpc);
//if(tmpc=='#') break;
//x=getchar();
if(c!='#')
c=*exp++; //c指向下一个字符

}
//printf("in while");
//printf("当前的theta:%cn",theta);
//printf("当前的c:%cn",c);
//printf("当前的tmpc:%cn",tmpc);
}//while
StackTop(OPND,&y);
printf("表达式的运算结果为%cn",y);
}
void main(void)
{
char str[M];
printf("请输入中缀表达式(注意所有运算结果都应该保证在10以内,以免出错.):n");
gets(str);
EvaluateExpression(str);
}
怎样用数据结构的栈来计算带括号的表达式(中缀表达式)?我不要求用语言实现,只要形象的说明下就行了.
怎样用数据结构的栈来计算带括号的表达式(中缀表达式)?我不要求用语言实现,只要形象的说明下就行了.
主要是遇到左括号后和右括号前,书上根本没讲清楚.
zq7771年前1
我是elyse的馬甲 共回答了13个问题 | 采纳率69.2%
就是遇到左括号就把左括号入栈
遇见右括号就栈顶的括号值出栈,并判断跟当前右括号是否配对
比如新括号是右括号],则必然栈顶是[才能配对
一个含多位数的中缀表达式如何转换成后缀表达式(逆波兰表达式)?
一个含多位数的中缀表达式如何转换成后缀表达式(逆波兰表达式)?
我在写程序时遇到了一些问题
例如10+11转化后是1011+
运算时该怎样确认是1+011;还是10+11;还是101+1?
麻烦大家帮下忙,顺便再问一下关于小数点、sin()等函数、和需要两个变量,中间用逗号隔开的函数,例如f(a,b)的处理.以及对于“+”、“-”是运算加、运算减,还是正号、符号的识别问题.
努力少于ee1年前1
zh202915 共回答了20个问题 | 采纳率90%
后缀表达书似乎不支持多位数的运算
1011+的话应该是不能算的,因为参数多了
就拿这个当例子解释一下运算过程好了
输入1 入栈1 栈堆1
.0 .0 .1 0
.1 .1 .1 0 1
.1 .1 .1 0 1 1
.+ . .1 0 2 //发现输入了一个2位运算符号,出栈最后两位数相加,把相加结果入栈
然后没有输入就error了
后面那个问题不是很明白,+,-,*,/也是两位运算符啊
“+”,“-”在后缀运算符里面是运算符号
中缀表达式3 + 4/(25 -(6+15))* 8转换为后缀表达式
konkin1年前1
张姝 共回答了14个问题 | 采纳率78.6%
3 4 25 6 15 + - 8 * / +
中缀表达式A-(B+C/D)*E的后缀表达式是什么
刘冉871年前1
非巴西卡卡 共回答了24个问题 | 采纳率87.5%
这是一条很经典的例题~大部分初赛书都有说~我也说不准是哪本书最先出~
答案是:
ABCD/+E*-
分析如下:
其实就是先写运算对象再写符号而已~
一般格式是{运算对象}{运算对象}{操作符}
CD/
B(CD/)+
(BCD/+)E*
A(BCD/+E*)-
ABCD/+E*-
C语言数据结构(写出下列中缀表达式的后缀表达式)
C语言数据结构(写出下列中缀表达式的后缀表达式)
(1) -A+B-C+D A-B+C-D+
(2) A*-B+C AB-*C+
答案我是知道的,但我不知道是怎得来的,请懂的给我说说!
会爬树的小灰兔1年前1
Luciferome 共回答了22个问题 | 采纳率86.4%
答案知道是对的.为什么会不知到为什么对呢.
中缀表达式和我们平时的普通表达式差不多,而后缀表达式是遇到操作符进行归约的
比如(1)里的:A-.遇到-号,归约成-A(用X代替这个-A);XB+.碰到+号,归约成X+B(即:-A+B,这里的X+B用Y代替);YC-.碰到-号,归约成Y-C.后面照样归约就行了
我前面将的就相当于把后缀表达式翻译成中缀表达式,反过来的翻译方法其实也一样的
不知你明白没有,有问题可以再提
数据结构题,中缀表达式A-(B+C/D)*E的后缀表达式是?
kenne11年前1
stevened 共回答了22个问题 | 采纳率90.9%
abcd/+e*-
怎样用数据结构的栈来计算带括号的表达式(中缀表达式)?我不要求用语言实现,只要形象的说明下就行了.
怎样用数据结构的栈来计算带括号的表达式(中缀表达式)?我不要求用语言实现,只要形象的说明下就行了.
比如表达式A*(B+C/D)-E*F,计算过程是怎样
夕881年前1
头碰头 共回答了22个问题 | 采纳率86.4%
遇左括号直接放进运算符栈,…遇见右括号,若当前运算符栈顶不是左括号,则退出一个运算符,两个操作数,直到运算符栈顶是和右括号配对的左括号,这时左括号就可以出栈了
已知中缀表达式,求其后缀表达式,请举一例子说明,
划不来1年前1
flicter 共回答了17个问题 | 采纳率100%
比如:
(1+2)*3-4*(5-6)+1-8
先按照优先级把所有括号加上:
当优先级相同如A+B+C 加括号从左边加到右边:((A+B)+C)
(((((1+2)*3)-(4*(5-6)))+1)-8)
从内括号起,把每个括号里的运算符提到当前括号的最前面,
比如(A+B) -> (+AB)
再比如(A*(B+C)) -> (*A(+BC))
故有(-(+(-(*(+12)3)(*4(-56)))1)8)
把括号去掉,就是对应的后缀式:
-+-*+123*4-5618
【讨论】已知中缀表达式为a-(b+c/d)*e,其后缀形式为?
【讨论】已知中缀表达式为a-(b+c/d)*e,其后缀形式为?
这道题是复旦那本指南上P71页例3,已知“中缀表达式”怎么建立其相应的二叉树啊?这一点我不明白,[]
霆锋谢1年前1
58专用hh 共回答了15个问题 | 采纳率86.7%
很简单阿,画个树使其中序遍历得到这个中缀表达式,再后序遍历就是后续表达式了,一般运算符号都放在子数根所在位置吧,后缀表达式:abcd/+e*- 查看原帖