C语言中后缀到中缀的转换
有人能帮我在C语言中进行后缀到中缀的转换吗?我试了好几次,但还是弄不懂逻辑 我知道算法,它有点像:C语言中后缀到中缀的转换,c,data-structures,stack,postfix-notation,C,Data Structures,Stack,Postfix Notation,有人能帮我在C语言中进行后缀到中缀的转换吗?我试了好几次,但还是弄不懂逻辑 我知道算法,它有点像: 将表达式作为输入 如果字符是一个操作数,则将其推入堆栈 如果char是一个运算符,则从堆栈中连续弹出两个元素,将运算符放在它们之间,然后将结果表达式推入堆栈 执行上述步骤,直到未读取整个表达式 #包括 char-st[100]; int top=-1; 无效推送(字符el) { st[++顶部]=el; } char pop() { 返回st[顶部--]; } int isop(字符值) {
- 将表达式作为输入
- 如果字符是一个操作数,则将其推入堆栈
- 如果char是一个运算符,则从堆栈中连续弹出两个元素,将运算符放在它们之间,然后将结果表达式推入堆栈
- 执行上述步骤,直到未读取整个表达式
#包括
char-st[100];
int top=-1;
无效推送(字符el)
{
st[++顶部]=el;
}
char pop()
{
返回st[顶部--];
}
int isop(字符值)
{
如果(val='+'| | val='-'| | val='*'| | val='/'| | val='%'))
{
返回1;
}否则{
返回0;
}
}
void main()
{
字符exp[50],v1,v2,ex;
int i=0;
printf(“输入表达式:”);
获取(exp);
而(exp[i]!='\0')
{
if(isop(exp[i]))
{
v1=pop();
v2=pop();
ex=exp[i];
}否则{
推(exp[i]);
}
i++;
}
}
唯一让我感到困惑的地方是,如何将结果表达式(通过将运算符放在两个弹出操作数之间获得的表达式)再次推入堆栈
谢谢。您希望中缀表达式采用什么形式?作为字符串?作为解析树?作为令牌的链接列表?这将确定答案的条件(尽管所有答案都是“弹出堆栈上最上面的两个元素,将它们与运算符组合成一个组合表达式,并将其推送到堆栈上”的一些变体)另外,您是否关心是否能够计算中缀表达式?因为如果计算中缀表达式,并且需要正确的值,在某些情况下可能需要插入括号(或者在所有情况下,如果不需要生成最小的结果。)@rici我希望中缀表达式作为字符串
#include<stdio.h>
char st[100];
int top = -1;
void push(char el)
{
st[++top] = el;
}
char pop()
{
return st[top--];
}
int isop(char val)
{
if (val == '+' || val == '-' || val == '*' || val == '/' || val == '%')
{
return 1;
} else {
return 0;
}
}
void main()
{
char exp[50], v1, v2, ex;
int i = 0;
printf("Enter the expression: ");
gets(exp);
while(exp[i] != '\0')
{
if(isop(exp[i]))
{
v1 = pop();
v2 = pop();
ex = exp[i];
} else {
push(exp[i]);
}
i++;
}
}