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
    Futur 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
    Points : 5
    Points
    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 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    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 012
    Points : 23 145
    Points
    23 145
    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
    Futur 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
    Points : 5
    Points
    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
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    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
    Futur 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
    Points : 5
    Points
    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 expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 648
    Points : 1 656
    Points
    1 656
    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....
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  7. #7
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    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 );
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  8. #8
    Membre chevronné

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 395
    Points : 2 107
    Points
    2 107
    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