Я еще не реализовал весь метод 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;
}