Partage
  • Partager sur Facebook
  • Partager sur Twitter

d'ajout et suppression d'une list chaîne

    22 novembre 2017 à 23:55:26

    Bonjour à tous, 

    Je ne comprend pas pourquoi je n'arrive pas à supprimer correctement le premier élément de ma list_a et d'ajouté cet élément dans la list_b via une fonction.

    https://codeshare.io/G7PoEn

    Quand je procède tous dans le main ça marche parfaitement

    https://codeshare.io/5DQ1dY

    Print_list : affiche tous les nombre de la liste

    Push_back_list : ajout le nombre à la fin de ma liste

    Push_front_list : ajout le nombre au début de ma liste

    Pop_front_list : supprime le premier élément de ma liste

    Merci d'avance pour vos réponses. 

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2017 à 10:15:51

      Salut met ton code sur le site plutôt perso je n'arrive pas à accéder a tes liens (Après c'est peut être moi)
      • Partager sur Facebook
      • Partager sur Twitter
      Quand tu regardes l'abîme, l'abîme regarde aussi en toi.
        23 novembre 2017 à 11:12:04

        J'y arrive mais c'est long.
        Je colle le code.

        List    Pb(List l_a, List l_b)
        {
                int nb = l_a->nb ;
        
                if (is_empty_list(l_a) == 1)
                        return new_list();
        
        				l_a = pop_front_list(l_a);           // je retire le premier element de la list
                l_b = push_front_list(l_b, nb);			 // j'ajoute l'element retirer c'est a dire nb au début de ma list_b
        
        				return (0);
        }
        int     main(int ac , char **av)
        {
                List list_a = new_list();
                List list_b = new_list();r
                int i = 1;
                int nb = 0;
          
                while (av[i] != NULL) {
                        nb = my_getnbr(av[i]);
                        list_a = push_back_list(list_a, nb);
                        i = i + 1;
                }
              // par exemple si mon av[1] = 1 ; av[2] = 2 ; av[3] = 3;
          			my_printf("List_a = "); 
          			print_list(list_a);			// ma list_a = 1 2 3;
                my_printf("\n");
        
                Pb(list_a, list_b);			// j'appelle la fonction Pb
               	
          			my_printf("List_a = "); // Quand j'excute le prog il m'affiche : List_a = 2
          			print_list(list_a);
                my_printf("\n");
                my_printf("List_b = "); // Quand j'excute le prog il m'affiche : List_b  est vide !
          			print_list(list_b);
                my_printf("\n");
        
        				list_a = clear_list(list_a);
                list_b = clear_list(list_b);
        
          			return (0);
        

        et

        int     main(int ac , char **av)
        {
                List list_a = new_list();
                List list_b = new_list();
                int i = 1;
                int nb = list->nb;
          
                while (av[i] != NULL) {
                        nb = my_getnbr(av[i]);
                        list_a = push_back_list(list_a, nb);
                        i = i + 1;
                }
              // par exemple si mon av[1] = 1 ; av[2] = 2 ; av[3] = 3;
          			my_printf("List_a = "); 
          			print_list(list_a);			// ma list_a = 1 2 3;
                my_printf("\n");
              
                l_a = pop_front_list(l_a);           // je retire le premier element de la list
                l_b = push_front_list(l_b, nb);			 // j'ajoute l'element retirer c'est a dire nb au début de ma list_b
        			
          			my_printf("List_a = "); // Quand j'excute le prog il m'affiche : List_a = 2 3
          			print_list(list_a);
                my_printf("\n");
                my_printf("List_b = "); // Quand j'excute le prog il m'affiche : List_b = 1
          			print_list(list_b);
                my_printf("\n");
          
        				list_a = clear_list(list_a);
                list_b = clear_list(list_b);
          			return (0);




        -
        Edité par neuneutrinos 23 novembre 2017 à 11:19:24

        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2017 à 12:03:02

          Du coup on va pas parler de ton indentation ^^ et il sort d'ou le list ligne 6 du deuxième bout de code ? (int nb = list->nb) c'est une global ?
          • Partager sur Facebook
          • Partager sur Twitter
          Quand tu regardes l'abîme, l'abîme regarde aussi en toi.
            23 novembre 2017 à 12:33:12

            Non ce n'est pas une global, je veux que ma variable nb stocke l'element nb de ma list_a (désolé petit erreur de copier coller)

            int nb = list_a -> nb;

            Dans mon main lorsque je procéde comme dans l'exemple 2 ca marche mais pas via une fonction.

            Voici structure que j'utilise : 

            Typedef struct ListElement
            {
              int nb;
              struct ListElement *next;
            
            }ListElement, *List;



            • Partager sur Facebook
            • Partager sur Twitter
              23 novembre 2017 à 16:04:40

              Alors j'ai pas trouvé d'erreur mais je te conseil fortement de pas faire de typedef struct et mettre le typedef en pointeur ... c'est un coup a oublier et perdre du temps ... surtout que si quelqu'un travail avec toi il va pas comprendre si il ne regard pas ton header.

              Mais je comprend pas tout il faut que tu nous donne ta fonction new list aussi

              • Partager sur Facebook
              • Partager sur Twitter
              Quand tu regardes l'abîme, l'abîme regarde aussi en toi.
                23 novembre 2017 à 16:26:54

                En C les paramètres de fonctions se passe par valeur.

                Pb(list_a, list_b); 

                Je suis certains qu'après cet appel de fonction, list_a n'a pas changé de valeur (et aussi list_b)

                C'est pour cela que de cacher un pointeur dans un typedef n'aide pas du tout.

                Il faut que tu change le prototype de Pb (et son nom pour la lisibilité au passage) ;) 


                • Partager sur Facebook
                • Partager sur Twitter

                d'ajout et suppression d'une list chaîne

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown