gpt4 book ai didi

c - 实现 infixToPostfix 方法,但不知道为什么我第一次推送 '('

转载 作者:行者123 更新时间:2023-11-30 19:04:52 25 4
gpt4 key购买 nike

我还没有实现整个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com