реализует метод infixToPostfix, но не знаю, почему я нажимаю '(' в первый раз - PullRequest
0 голосов
/ 24 июня 2018

Я еще не реализовал весь метод infixTopostFix.но у меня есть вопрос по этому поводу.Я все еще выясняю.

(обратите внимание: мой метод infixToPostfix еще не завершен)

#include <stdio.h>
#define SIZE 100

int top = -1;
char stack[SIZE];
void push(char data){

  if(top > SIZE-1)
    printf("full size\n");
  else{
    top = top + 1;
    stack[top] = data;
  }
}

char pop(){
  char data;
  if(top<0)
    printf("pop: empty!\n");
  else{
    data = stack[top--];
    return data;
  }
}

int is_operator(char symbol){

if(symbol == '^' || symbol == '*' || symbol == '/' || symbol == '+' || symbol == '-' || symbol == '')
  return 1;
else
  return 0'

}

int precedence(char symbol){
  if(symbol == '^'){
    return 3;
  }else if(symbol == '*' || symbol == '/'){
    return 2;
  }else if(symbol == '-' || symbol == ''){
    return 1;
  }else{
    return 0;
  }
}

Итак, теперь есть метод inFixToPostfix.

int infixToPostfix(char exp[], char postix[]){
  int i, j;
  char data;
  char x;

и мой вопрос об этой части.этот метод push (ниже) имеет параметр '('. и это первый параметр push. Но я не понимаю, почему я должен нажимать это первым.

Я имею в виду .. Я вижу этоКод означает (здесь выражение), но я бы подумал, что это просто выражение без скобок.

  push('(');
  strcat(exp, ')');

  i = 0; j = 0;
  data = exp[i];

  while(data != NULL){
    if(data == '('){
      push(data);
    }
    else if( isdigit(data) || isalpha(data)){
      postfix[j] = data;
      j++;
    }
    else if(is_operator(data) == 1){
      x = pop();

    }
  }
}

int main(void) {

  char exp[] = "(a+b)*3+(c-d)*2";
  char postfix[SIZE];
  // postfix: ab3+*cd2-*
  infixToPostfix(exp, postfix);
  puts(postfix);
  return 0;
}

1 Ответ

0 голосов
/ 24 июня 2018

Обратите внимание, что любое математическое выражение имеет то же значение, что и выражение, заключенное в скобки. Мы используем это свойство, помечая начало разбираемого выражения символом '('. Это позволяет алгоритму оценить окончательное значение без использования специального случая. Я предлагаю после того, как вы получите его, удалите строку, которая толкает парен, и пошагово пройдитесь по коду с примером ввода. Это упражнение поможет вам понять его цель.

...