Liste chainée [Langage C]
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Liste chainée [Langage C]



  1. #1
    invite20e071f3

    Liste chainée [Langage C]


    ------

    Bonjour à tous,

    J'ai un problème avec un exercice sur les listes ;

    Soit la définition d'une liste :

    Code:
    typedef struct cellule
        {
            float donnee;                      // Création de la structure cellule
            struct cellule *suivant;
        } cellule;
    
    typedef struct cellule Liste;
    Mon but est de rechercher une valeur dans un liste et de renvoyer sa position dans la liste et puis de compter le nombre d'occurence de ce nombre.

    Mes fonctions sont :

    Code:
    int rechercher_valeur (Liste *L,int nb)  // Permet de rechercher une valeur dans une liste et de renvoyer sa position
    {
        int position=0;               // variable de renvoit
        Liste *p=L;
                          // pointeur temporaire pour le parcours
    
        while(p=!NULL)
        {
            if(p->donnee==nb)
    
    
                p=p->suivant;
                position++;
    
        }
        
        return position;
    }
    et

    Code:
    int occurence_valeur (Liste *L,int valeur)
    {
        int i=0;
        Liste *p=L; //Pointeur temporaire
        
        /* Si la liste est vide, on renvoie 0 */
        if(p == NULL)
            return 0;
     
        
        while((L = rechercher_valeur(L, valeur)) != NULL)
        {
            
            p = p->suivant;
            i++;
        }
        return i;
    }
    et mon main est :

    Code:
    int main()
    {
        int taille_liste=0;
        int longueur=0;
        int position=0;
        int occurence=0;
        Liste *maliste;
        
        printf("Combien de cellules avez-vous besoin (>1) :");
        scanf("%d",&taille_liste);
    
        maliste=cree_Liste(taille_liste);
        longueur=longueur_Liste(maliste);
        printf("\nLa longueur de la liste est %d\n",longueur);
        affiche_Liste(maliste);
    
        
        printf("Quelle valeur rechercher vous ?");
        int valeur=0;
        scanf("%d",&valeur);
        position=rechercher_valeur(maliste,valeur);
        printf("La position est %d\n\n",position);
        printf("Le nombre revient %d fois \n",occurence);
    
    
    
        maliste = supprimer_debut(maliste);
        affiche_Liste(maliste);
        longueur=longueur_Liste(maliste);
    
    
    
        printf("La longueur de la liste est %d",longueur);
    
        initilisation_a_zero_Liste(maliste);
    
        affiche_Liste(maliste);
    
        return 0;
    Seulement mon programme s’arrête directement après avoir demandé : " Quel valeur chercher vous ? ".

    Je ne trouve pas mon erreur dans la fonction rechercher_valeur , pourriez-vous m'aider ?

    NB: La création de ma liste et les autres fonctions utilisées dans le main fonctionne.

    Merci d'avance,

    Maxime 10

    -----

  2. #2
    invite20e071f3

    Re : Liste chainée [Language C]

    Petite erreur d'encodage ;

    Ma fonction rechercher-valeur est :

    Code:
    int rechercher_valeur (Liste *L,int nb)  // Permet de rechercher une valeur dans une liste et de renvoyer sa position
    {
                       // variable de renvoit
        int position=0;               // variable de renvoit
        Liste *p=L;
                          // pointeur temporaire pour le parcours
    
        while(p=!NULL)
        {
            if(p->donnee==nb)
                return position;
    
    
                p=p->suivant;
                position++;
    
        }
    }

  3. #3
    bisou10

    Re : Liste chainée [Language C]

    un petit effort, ta seconde fonction rechercher_valeur() ne compile même pas, c'est la moindre des choses de tester un peu son code avant de demander de l'aide...

    rechercher_valeur() ne renvoie jamais NULL, tu ne peux donc pas tester cette condition dans occurence_valeur().

    Pas regardé le reste.
    Dernière modification par bisou10 ; 26/08/2015 à 23h52.

  4. #4
    invite20e071f3

    Re : Liste chainée [Language C]

    C'est bon j'ai trouvé .

    Mais ma fonction compilait bien sur mon ordi ...

    Code:
    int rechercher_valeur (Liste *L,int nb)  // Permet de rechercher une valeur dans une liste et de renvoyer sa position
    {
                       // variable de renvoit
        int position=1;
                    // variable de renvoit
        Liste *p=L;
                          // pointeur temporaire pour le parcours
    while(p->donnee!=nb && p!=NULL){
                p=p->suivant;
                position++;
    
                if(p==NULL)
                    return -1;
    
        }
        return position;
    }
    
    int occurence_valeur (Liste *L,int valeur)
    {
        int i=0;
        Liste *p=L; //Pointeur temporaire
    
        /* Si la liste est vide, on renvoie 0 */
        if(p == NULL)
            return 0;
    
    
        while(p != NULL)
        {
            if(p->donnee==valeur)
                i++;
            p = p->suivant;
    
        }
        /* Et on retourne le nombre d'occurrences */
        return i;
    }

  5. A voir en vidéo sur Futura
  6. #5
    invite0bbe92c0

    Re : Liste chainée [Language C]

    Citation Envoyé par bisou10 Voir le message
    un petit effort, ta seconde fonction rechercher_valeur() ne compile même pas, .
    Par forcément : en C, (pas en C++) l'absence de return dans une fonction non void est admis et la valeur de retour correspond au contenu du registre EAX (pour du Intel) au moment où est exécutée l'instruction RET, mais c'est censé compiler sauf si on met un "treat warning as error" sur ce cas.

  7. #6
    bisou10

    Re : Liste chainée [Langage C]

    Tu as tout à fait raison, et c'est pour cela que je n'avais pas relevé son message après m'être renseigné sur ce fait (mais plutôt via cette discussion sur SO http://stackoverflow.com/questions/1...lue-without-pr )


  8. #7
    invite1c6b0acc

    Re : Liste chainée [Langage C]

    Moi, mon compilo, c'est surtout "while(p=!NULL)" qu'il avait du mal à comprendre ...

    Faut dire qu'il est bête, mon compilo : il a cru que !NULL ça valait 1 et que j'essayais d'affecter une valeur entière à un pointeur ...
    Même pas fichu de deviner qu'il fallait lire "while(p!=NULL)" ...

  9. #8
    invite0bbe92c0

    Re : Liste chainée [Langage C]

    Citation Envoyé par Chanur Voir le message
    et que j'essayais d'affecter une valeur entière à un pointeur ...
    Ca tombe bien : un pointeur ne contient que des valeurs entières. (dans le cas contraire merci de préciser le processeur et l'OS que vous utilisez).

  10. #9
    invite1c6b0acc

    Re : Liste chainée [Langage C]

    Citation Envoyé par Bluedeep Voir le message
    Ca tombe bien : un pointeur ne contient que des valeurs entières. (dans le cas contraire merci de préciser le processeur et l'OS que vous utilisez).

    Certes ...

    Je n'ai pas transcrit exactement le message : il disant précisément "assignment makes pointer from integer without a cast"

Discussions similaires

  1. liste chainée, c++
    Par invite7ca76cd3 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 21/08/2015, 00h05
  2. [C]Liste chainée
    Par invite8b421ec7 dans le forum Programmation et langages, Algorithmique
    Réponses: 29
    Dernier message: 09/04/2011, 12h09
  3. [langage C]Liste chainée simple
    Par invite8b421ec7 dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 02/04/2011, 22h13
  4. liste chainée
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 01/01/2011, 20h18
  5. liste chainée en C
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 01/01/2011, 12h31