IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Liste itérative en C


Sujet :

C

  1. #21
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    Citation Envoyé par mathieumadrid
    oui, c'est pour ça que je voulais introduire nbelements dans la structure. Mais est-ce possible de faire autrement en parcourant le tableau par exemple (avec un pointeur) ?
    et bien il faudra une valeur que l'utilisateur ne rentrera jamais !tu la met dans la case apres ton dernier element.
    et quand en parcourant ton tableau tu tombe dessus, tu arretes de compter...mais ca me parrait difficile, vu que tu n'a aucune idée de ce que l'utilisateur peut entrer...

  2. #22
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    c'est dans l'ennoncer qu'on te demande un tableau de char ?

  3. #23
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Que penserais tu d'une structure beaucoup plus simple, et de travailler, effectivement, avec une liste simpelent chainée
    Un truc du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef struct SValeur
    {
        /* à remplire avec les bons éléments, dépendemment des besoins */
    }Val;
    /* Les noeud de la liste */
    typedef struct SNoeud
    {
       /* qui contiennent chacun une valeur */
       Val Valeur;
       /*et un pointeur vers l'élément suivant */
       struct SNoeud *Suivant;
    }Noeud;
    La récursivité peut venir bien à point pour certaines fonctions, entre autre:
    pour savoir le nombre de noeuds présents dans la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int CompteNoeud( Noeud *actuel)
    {
        if(actuel->Suivant==NULL)
            return 0;
        return CompteNoeud(actuel->Suivant)+1;
    }
    Pour la création d'un nombre donné de noeuds
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Noeud* Init(int combien)
    {
        Noeud* nouveau=malloc(sizeof(Noeud));
        if(combien==0)
            nouveau->Suivant=NULL
        else
            nouveau->Suivant=Init(combien-1);
        return nouveau;
    }
    pour la libération de la mémoire allouée à toute la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void Libere(Noeud* actuel)
    {
        if(actuel->Suivant!=NULL)
            Libere(actuel->Suivant;
        actuel->Suivant=NULL;
        free(actuel);
    }
    Pour obtenir un pointeur sur les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Val* GetValeurs(Noeud* actuel, int index)
    {
        Val* retour;
        if(index==0)
            retour=&(actuel->Valeur);
        else
        {
            if(actuel->Suivant==NULL)
            {
                retour=NULL;
                printf("indice hors limites\n");
            }
            else
                retour=GetValeur(actuel->Suivant, index);
        }
        return retour;
    }
    Pour l'insertion à n'importe quel position de la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    /*renverra le nouvel élément inséré */
    Noeud* InserePos(Noeud* actuel, Val valeur, int index)
    {
        Noeud *Retour;
        if(index==0)
        {
            Retour=malloc(sizeof(Noeud));
            Retour->Suivant=actuel->Suivant;
            Retour->Valeur=valeur;
            if(actuel!= NULL)
                actuel->Suivant=Retour;
        }
        else
        {
            Retour=InserPos(actuel->Suivant, valeur, index-1)
            if(actuel->Suivant==NULL)
                actuel->Suivant=Retour;
        }
        return Retour;
    }
    Pour définir les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void SetVal(Noeud* actuel, Val valeur, int index)
    {
        if(index==0)
            actuel->Valeur=valeur;
        else
        {
            if(actuel->Suivant==NULL)
                printf("index hors limites");
            else
                SetVal(actuel->Suivant, valeur, index-1);
        }
    }
    Voire, si tu dispose dans ta structure "Val" de la possibilité de tester si c'est vide, pour compter le nombre d'éléments remplis (symbolisé ici par le test actuel->Val.rempli==0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int CompteRemplis(Noeud *actuel)
    {
       if(actuel->Val.rempli==0 || actuel->Suivant==NULL)
           return 0;
       return CompteRemplis(actuel->Suivant)+1
    }
    Avec tout cela, je crois que tu as les principales fonctions qui te seront nécessaires (peut etre à renommer quand meme )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Listes chainées itératives
    Par Devilju69 dans le forum C
    Réponses: 5
    Dernier message: 21/02/2008, 00h15
  2. Création d'une liste de manière itérative
    Par nahlette dans le forum Prolog
    Réponses: 2
    Dernier message: 29/11/2007, 11h18
  3. Liste itérative ou récursive
    Par devstud dans le forum C
    Réponses: 11
    Dernier message: 04/01/2007, 17h07
  4. Réponses: 2
    Dernier message: 04/12/2006, 05h48
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo