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 chainée c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut liste chainée c++
    bonjour

    alors voila je voudrais faire une liste chainée en c++ mais d'après se que je vois sur internet trés peu voir pas du tout de tuto existe.

    du coup le langage c++ a t'il ou non la notion de liste chainée ?

    si oui

    j'ai ce programme en C qui représente une liste chainée

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
     
    struct cellule
    {
            int entier;
            struct cellule *suivant;
    };
     
    struct cellule *tete;
    struct cellule *courant;
    struct cellule *nouveau;
    struct cellule *precedent;
     
    int main ()
    {
            int valeur;
            int flag;
     
            tete = NULL;
     
            printf("entrer une valeur\n");
            scanf("%d", &valeur);
     
            while(valeur != 0)
            {
                    if(valeur != 0)
                    {
                            flag = 0;
                            nouveau = (struct cellule *) malloc(sizeof(struct cellule));
                            nouveau->entier = valeur;
                            nouveau->suivant = NULL;
     
                            if( tete == NULL)
                            {
                                    tete = nouveau;
                                    flag = 1;
                            }
     
                            courant = tete;
     
                            while(flag == 0 & courant != NULL)
                            {
                                    if( tete->entier > nouveau->entier)
                                    {
                                            tete = nouveau;
                                            tete->suivant = courant;
                                            flag = 1;
                                    }
     
                                    if( courant->entier < nouveau->entier && courant->suivant == NULL)
                                    {
                                            courant->suivant = nouveau;
                                            flag = 1;
                                    }
     
                                    if( nouveau->entier <= courant->entier && flag == 0)
                                    {
                                            nouveau->suivant = courant;
                                            precedent->suivant = nouveau;
                                            flag = 1;
                                    }
     
                                    if(flag == 1)
                                    {
                                            courant = tete;
                                            precedent = courant;
                                    }
                                    else
                                    {
                                            precedent = courant;
                                            courant = courant->suivant;
                                    }
     
                            }
                    }
     
                    printf("entrer une valeur\n");
                    scanf("%d", &valeur);
            }
     
            while(courant != NULL)
            {
                    printf("entier = %d\n", courant->entier);
                    courant = courant->suivant;
            }
    }
    est ce la meme façon de faire en c++ ?

    et encore une fois si oui peut on faire une liste chainée en fonction d'un objet ?

  2. #2
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Une liste chainée est une structure de données qui n'est en aucun cas liée à un seul langage (encore heureux!).
    Donc tu peux les implémenter avec tous les langages que tu veux dont le C++.

    Ceci dit:

    Citation Envoyé par devdeb91 Voir le message
    alors voila je voudrais faire une liste chainée en c++ mais d'après se que je vois sur internet trés peu voir pas du tout de tuto existe.
    Faux.
    Ca m'a pris un quart de seconde :
    http://sites.univ-provence.fr/cpp/V1/Lecons/L10.pdf
    http://tfc.duke.free.fr/coding/linked_list.html
    http://www.codeproject.com/Articles/...list-using-C-C

    Citation Envoyé par devdeb91 Voir le message
    du coup le langage c++ a t'il ou non la notion de liste chainée ?
    J'ai répondu plus haut.

    Citation Envoyé par devdeb91 Voir le message
    j'ai ce programme en C qui représente une liste chainée
    est ce la meme façon de faire en c++ ?
    Oui tu peux faire de la même manière.

    Citation Envoyé par devdeb91 Voir le message
    et encore une fois si oui peut on faire une liste chainée en fonction d'un objet ?
    Question mal formulée, mais oui tu peux définir des objets pour implémenter ta liste chainée.

  3. #3
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    FAQ C++

    Et si tu suis bien le graphique tu devrais tomber sur ceci.


    Edit : @Neckara

  4. #4
    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,

    En C++ on utilisera std::list.

    EDIT : grillé par Kaamui

  5. #5
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Je pense qu'il s'agit d'un exercice de TP dont le but est d'implémenter soit même les listes chainées plutôt que d'utiliser la STL.

  6. #6
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    ok merci pour ces informations je vais essayer ce container.

    Citation Envoyé par LinuxUser Voir le message
    Je pense qu'il s'agit d'un exercice de TP dont le but est d'implémenter soit même les listes chainées plutôt que d'utiliser la STL.
    non non loin de la c'est juste que j'ai remarquer que une liste chainée est peu etre mieux adapter qu'un tableau d'objet du coup je suis partie sur une liste chainée

  7. #7
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Au temps pour moi, oublie ce que je viens d'écrire.

  8. #8
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Bonjour,

    En C++ on utilisera std::list.

    EDIT : grillé par Kaamui
    std::list est bien mais si jamais je veut supprimer un element de la liste qui se trouve au milieu il n'y as pas de methode donc elle ne convient pas je l'avais deja vue ce matin on peut supprimer que le premier ou dernier element d'aprés se que j'ai compris

    Citation Envoyé par LinuxUser Voir le message
    Au temps pour moi, oublie ce que je viens d'écrire.
    pas de probleme

  9. #9
    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
    Citation Envoyé par devdeb91 Voir le message
    std::list est bien mais si jamais je veut supprimer un element de la liste qui se trouve au milieu il n'y as pas de methode donc elle ne convient pas je l'avais deja vue ce matin on peut supprimer que le premier ou dernier element d'aprés se que j'ai compris
    std::list est justement fait pour faire des insertions et des suppressions au milieu.
    Pour supprimer tu as une méthode erase.
    Après pour trouver l'élément à supprimer, tu peux parcourir ta liste mais il vaut mieux utiliser des algorithmes déjà existant.

  10. #10
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Ok bah je vais voir tout ça merci

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par devdeb91 Voir le message
    std::list est bien mais si jamais je veut supprimer un element de la liste qui se trouve au milieu il n'y as pas de methode donc elle ne convient pas je l'avais deja vue ce matin on peut supprimer que le premier ou dernier element d'aprés se que j'ai compris
    C'est le principe même d'une liste chaînée, chaque maillon n'est reliée qu'au suivant et/ou précédent.
    A ne pas confondre avec le vector.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #12
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    bon alors voila j'ai un peu utiliser std::list et deja je tien a dire qu'elle est remarquable.

    j'ai d'abord fait sa
    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
    std::list<int> mylist;
      std::list<int>::iterator it1,it2;
     
      // set some values:
      for (int i=1; i<10; ++i) mylist.push_back(i*10);
     
     
      it1 = it2 = mylist.begin(); 
      std::cout << *it2 << std::endl;
      advance (it2,6);
      std::cout << *it2 << std::endl;       
      ++it1;                    
     
    std::cout << *it1 << std::endl;
      it1 = mylist.erase (it1);   
      std::cout << *it1 << std::endl;
     
      it2 = mylist.erase (it2); 
     
      ++it1;                      
      --it2;         
     
      mylist.erase (it1,it2);
     
    it1 = mylist.begin();
      advance (it1, 4);
      std::cout << *it1 << std::endl;
      mylist.erase(it1);       
     
      std::cout << "mylist contains:";
      for (it1=mylist.begin(); it1!=mylist.end(); ++it1)
        std::cout << ' ' << *it1;
      std::cout << '\n';
    pour me familiariser un peu

    puis j'ai tenter ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::list<enemy> ennemi;
     
    ennemi.push_back(enemy("guepe", 100, 0, "poison", 10, 5));
     std::list<enemy>::iterator it1;
                   for(it1 = ennemi.begin(); it1 != ennemi.end(); it1++)
                   {
                       std::cout << *it1 << std::endl;
                   }
    et la c'est le drame au niveau de l'affichage de it1 il me balance cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\Users\kevin\Desktop\list\main.cpp||In function 'int main()':|
    C:\Users\kevin\Desktop\list\main.cpp|49|error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|600|error:   initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = enemy]'|
    ||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|
    donc j'ai 2 question :

    pourquoi ces erreurs bien que je pense un peu comprendre le sens ?

    et ensuite comment utiliser un element de la liste et ces methodes ?

  13. #13
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu as bien défini une fonction ostream& operator<<(ostream&, const enemy&), pour écrire un enemy dans un ostream?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/02/2005, 23h42
  2. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  3. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  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