Я работаю над проектом, целью которого является преобразование инфиксного выражения в постфиксный.Моя программа работает в той же функции, но я должен сократить ее.Для этого я создал три функции, которые должны добавить узлы в один и тот же список, и которые должны показать мне список в моей основной функции.Но это не работает, например, если я отображаю свой список после нажатия в моей функции Treat_number, это работает, но ничего не отображается в моей основной функции.Итак, мой вопрос, как сохранить список?Большое вам спасибо:)
int treat_parenthesis(t_node *stack, t_eval *eval, t_node *postfix)
{
if (eval->ch == '(') {
push(&stack, eval->ch);
}
else if (eval->ch == ')')
{
while(stack != NULL && stack->value != '(') {
push(&postfix, pop(&stack));
}
if (stack != NULL && stack->value != '(')
return -1;
else {
pop(&stack);
}
}
}
void treat_number(t_node *stack, t_eval *eval, t_node *postfix)
{
if (eval->ch >= '1' && eval->ch <= '9') {
push(&postfix, eval->ch);
//print_list(postfix);
}
}
void treat_operator(t_node *stack, t_eval *eval, t_node *postfix)
{
if (eval->ch == '(') {
push(&stack, eval->ch);
}
else if (eval->ch == ')')
{
while(stack != NULL && stack->value != '(') {
push(&postfix, pop(&stack));
}
if (stack != NULL && stack->value != '(')
return -1;
else {
pop(&stack);
}
}
//main function
int infix_to_postfix(char *infix, t_eval *eval)
{
int i = -1;
t_node *postfix = malloc(sizeof(t_node));
t_node *stack = malloc(sizeof(t_node));
while((eval->ch = infix[++i]) != '\0')
{
if (eval->ch == ' ')
{
continue;
}
treat_number(stack, eval, postfix);
treat_parenthesis(stack, eval, postfix);
treat_operator(stack, eval, postfix);
}
while (stack != NULL) {
push(&postfix, pop(&stack));
print_list(postfix);
}
stack = NULL;
reverse_list(&postfix);
print_list(postfix);
return (0);
}
//struct in include (.h)
typedef struct s_node
{
int value;
struct s_node *next;
} t_node;
typedef struct s_eval
{
char ch;
} t_eval;
//function to add node
void push(t_node **head_ref, char c)
{
t_node *new_node = malloc(sizeof(t_node));
if (new_node == NULL)
return ;
new_node->value = c;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
char pop(t_node **head_ref)
{
t_node *pop_node = malloc(sizeof(t_node));
if (pop_node == NULL)
return (-1);
pop_node = (*head_ref);
(*head_ref) = (*head_ref)->next;
return (pop_node->value);
}