我还没有实现整个 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;
}
最佳答案
请注意,任何数学表达式的计算结果都与括号内的表达式相同。我们通过使用 '('
标记正在解析的表达式的开头来利用此属性。这允许算法在不使用特殊情况的情况下计算最终值。我建议您在让它工作后,删除插入括号的行,并使用示例输入单步执行代码。此练习将帮助您理解其目的。
关于c - 实现 infixToPostfix 方法,但不知道为什么我第一次推送 '(',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51006587/