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 :

fonctions sur les Listes chainées


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut fonctions sur les Listes chainées
    Bonsoir,


    Je suis actuellement étudiant, et je viens de commencer les cours de programmation en C. Notre nous à demandé de réaliser des fonctions d'une liste chainée. pouvez-vous m'aider ? je ne sais pas par ou commencer.

    je vous explique ce qui est demandé :

    1- retrouver le énième élément d'une liste
    List* ieme ( List *L ; int index );


    2 - ajouter un élément à la énième place ...
    void add_ieme (List **L, int x, int index)


    3 - supprimer un élément à la énième place ...
    void del_ieme (List **L, int index)

    Merci d'avance

    Rototo1

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Nous voulons bien t'aider mais pas faire le travail à ta place.

    Afin que nous puissions t'aider dans de bonnes conditions, il faudrait que tu nous montre ce que tu as déjà fait et les points sur lesquels tu bloques.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut
    Je suis tout à fait d'accord avec vous. j'ai deja fait les fonction push, free. celles de basse mais alors les trois qui me reste je ne vois vraiment pas comment les faire.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Commence par écrire l'algorithme, en français / pseudo-code.

    Par exemple pour recherche du n-ième élément :
    1) Initialiser le compteur.
    2) Index == Compteur ?
    Si non :
    - Incrémenter un compteur
    - Allez à l'élément suivant
    - Recommencer à l'étape 2
    Si oui :
    - Retourner l'élément et terminer la fonction.

    Il faut faire la même chose pour chaque fonction, puis "traduire" en C.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut
    pour la recherche du ième élément.

    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
    int supp(List *L, int X){
     
        int i;
        for(i=0; i<X && L !=NULL; i++)
        {
            L=L->Next;
     
        }
        if( L == NULL)
        {
            return NULL;
        }
        else
        {
            return L;
        }
    }

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 754
    Par défaut
    Oui, pour la recherche du xème élément, le principe est bon, mais je ferais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // x=1 ==> le premier élement de la liste
    List *search(List *L, int X)
    {
       while(L!=NULL && --X) L=L->Next;
       return L;
    }
    Il vaut mieux renvoyer l'adresse de l'élément (je pense que cette fonction te servira dans les deux autres à écrire ), à l'appelant de tester si le retour n'est pas NULL.

    PS: quand tu postes un code, mets les balises code autour....

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Oui, pour la recherche du xème élément, ...Il vaut mieux renvoyer l'adresse de l'élément (je pense que cette fonction te servira dans les deux autres à écrire ), à l'appelant de tester si le retour n'est pas NULL.
    Oui, et c'est d'ailleurs ce qu'indique clairement l'énoncé par le prototype de la fonction :
    1- retrouver le énième élément d'une liste
    List* ieme ( List *L ; int index );

  8. #8
    Membre très actif

    Avatar de nicosmash
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 395
    Par défaut
    Vous pouvez utiliser google il y a pas mal de chose sur les listes chainées :

    Pour vous aider voici une partie de mon code :

    liste_cirulaire.h
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    /**********************************************************
    *
    * NOM : liste_Circulaire.h
    * SUJET : liste Circulaire
    *
    * AUTEUR : VIEUX Nicolas
    * VERSION : 1
    * CREATION : 18/10/12
    * DER. MODIF. : 31/10/12
    *
    * ACCES SRC : Bureau/ProgrammationSysteme/src/liste_Circulaire.h
    * FABRICATION : gcc -std=c99 -Wall -pedantic liste_Circulaire.c -o liste_Circulaire     
    *
    * CONTRAINTES : Aucune
    *
    ********************************************************/
     
    #include <sys/types.h>
     
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
     
    typedef struct liste_circulaire
    {
      int donnee;
      struct liste_circulaire *suiv;
      struct liste_circulaire *prec;
    }liste_circulaire;
     
    liste_circulaire *creation_liste();
     
    void ajouter_element(liste_circulaire *p, int valeur);
     
    void ajouter_en_queue (liste_circulaire *racine, int valeur);
     
    void supprimer_element(liste_circulaire *p,int valeur);
     
    void lire_liste(liste_circulaire *racine);
    liste_circulaire.c
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    /**********************************************************
    *
    * NOM : liste_Circulaire.c
    * SUJET : liste Circulaire
    *
    * AUTEUR : VIEUX Nicolas
    * VERSION : 1
    * CREATION : 18/10/12
    * DER. MODIF. : 31/10/12
    *
    * ACCES SRC : Bureau/ProgrammationSysteme/src/liste_Circulaire.c
    * FABRICATION : gcc -std=c99 -Wall -pedantic liste_Circulaire.c -o liste_Circulaire     
    *
    * CONTRAINTES : Aucune
    *
    ********************************************************/
     
    #include"liste_circulaire.h"
     
    liste_circulaire *creation_liste(){
      liste_circulaire *racine = malloc(sizeof *racine);
      if(racine != NULL){
        racine->prec=racine;
        racine->suiv=racine;
      }
      return racine;
    }
     
    void ajouter_element(liste_circulaire *p, int valeur){//p maillon suivant
      liste_circulaire *maillon = malloc(sizeof(liste_circulaire));
      if(maillon != NULL){
        ...
      }
    }
     
    void ajouter_en_queue (liste_circulaire *racine, int valeur)
    {
      ajouter_element(racine, valeur);
    }
     
     
    void supprimer_element(liste_circulaire *p,int valeur){
      if(p->donnee==valeur){
        ...
      }
      else{
        supprimer_element(p->suiv,valeur);
      }
    }
     
    void lire_liste(liste_circulaire *racine){
      liste_circulaire *tmp;
      for(tmp=racine->suiv;tmp!=racine;tmp=tmp->suiv){
        printf("%d,",tmp->donnee);
      }
    }
    Surtout ne copiez pas bêtement, comme vous l'on dit les autres membres.

    Algorithme puis du code petit à petit.

Discussions similaires

  1. Explication sur les listes chainées
    Par guipe dans le forum Débuter
    Réponses: 6
    Dernier message: 24/08/2010, 11h54
  2. Question sur les listes chainées.
    Par deubelte dans le forum C++
    Réponses: 15
    Dernier message: 18/03/2010, 13h29
  3. projet ou exercices sur les listes chainées
    Par petite_developpeuse dans le forum C
    Réponses: 1
    Dernier message: 12/12/2008, 17h07
  4. des questions sur les listes chainées
    Par hunter99 dans le forum C
    Réponses: 13
    Dernier message: 05/12/2006, 22h51
  5. Recherche fonction sur les listes
    Par becks dans le forum Général Python
    Réponses: 5
    Dernier message: 05/05/2006, 16h11

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