Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中后缀到中缀的转换_C_Data Structures_Stack_Postfix Notation - Fatal编程技术网

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(字符值) {

有人能帮我在C语言中进行后缀到中缀的转换吗?我试了好几次,但还是弄不懂逻辑

我知道算法,它有点像:

  • 将表达式作为输入
  • 如果字符是一个操作数,则将其推入堆栈
  • 如果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++;
  }
}