Как добавить узлы в тот же связанный список из других функций - PullRequest
0 голосов
/ 30 декабря 2018

Я работаю над проектом, целью которого является преобразование инфиксного выражения в постфиксный.Моя программа работает в той же функции, но я должен сократить ее.Для этого я создал три функции, которые должны добавить узлы в один и тот же список, и которые должны показать мне список в моей основной функции.Но это не работает, например, если я отображаю свой список после нажатия в моей функции 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...