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 en c++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par d�faut liste chain�e en c++
    bonjour

    je suis d�butante en c++, mais j'ai des conaissance en java et en C , je doit modifier ce programme pour cr�er une liste circulaire .

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template<class Elem> class link {
    public :
        Elem element ;
        Link * next ;
        Link (const Elem& elemval, Link* nextval =NULL)
        {
            element =elemval ; next =nextval ; 
        }
        Link( Link*nextval =NULL)
        {
            next= nextval ;
        }
    le programme ci dessus est fait pour cr�er une liste chain�e, et je sais qu'il faut ajouter un pointeur vers le premier �l�ment
    Ma question c'est au niveau des lignes soulign�es j'ai pas tr�s bien saisi la syntaxe


    Merci pour votre aide

  2. #2
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    Et bien c'est presque tr�s bien comme �a, il manque juste dans le prototype des m�thodes (fonctions) le type de valeur retour. S'il n'y en a pas il faut mettre "void". Genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void Link(Link const *nextval =NULL)
    EDIT:

    J'ai rien dit, ce sont des constructeurs...

  3. #3
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par d�faut liste chain�e en c++
    Merci beaucoup camboui
    Mon probl�me c'est au niveau des templates et les r�ferences je n'ai pas tr�s bien saisi le concept , par cons�quent j'ai pas compri la syntaxe des lignes soulign�s

  4. #4
    Membre �clair�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Sant�

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par d�faut
    Bonjour,

    Je pense plut�t que tu voulais que ton template de classe "link" voulais s'appelait "Link".

    Et par cons�quent, ton code �tait correct.

  5. #5
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par d�faut
    ouiii ,exactement

    Sinon je ne sais toujours pas comment la transformer en liste circulaire

  6. #6
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par moonp Voir le message
    Sinon je ne sais tjrs pas comment la transformer en liste circulaire
    Une liste circulaire est une liste dont le dernier �l�ment pointe sur le premier �l�ment. Vu que tu as une liste simplement cha�n�e, tu n'as qu'un pointeur next � traiter - il ne doit jamais �tre nul, sauf quand la liste est vide.

    Quand on a un �l�ment, this.next == this.

    Avec deux �l�ments, this->next->next = this.
    Avec trois �l�ments, this->next->next->next = this.

    Et ainsi de suite.

    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
     
    template<class Elem> class Link {
    private:
        void update_me()
        {
            if (!next) {
                next = this;
            } else {
                Link *current = next;
                while (current->next != next) {
                    current = current->next;
                }
                // we found a node which already loop on next, so we must insert
                // us at that very point. 
                current->next = this;
            }
        }
        void delete_me()
        {
            if (next == this)
                return; // the list is going to die with us
            Link *prev = NULL;
            Link *current = next;
            while (current) {
                if (current == this) {
                    // we just hit the "end" of the list, i.e. the point
                    // where we go back to us. We need to bypass
                    // us, and then we're done. 
                    prev->next = next;
                    break;
                }
                current = current->next;
            }
        }
    public :
        Elem element ;
        Link * next ;
        Link (const Elem& elemval, Link* nextval =NULL)
        {
            element =elemval ; next =nextval ; 
            update_next();
        }
        Link( Link*nextval =NULL)
        {
            next= nextval ;
            update_next();
        }
        ~Link()
        {
            delete_me();
        }
        ...
    Tr�s honn�tement, ce n'est probablement pas la bonne mani�re de faire une liste circulaire. Dans ce design, c'est � l'appelant de g�rer la construction correcte de la liste, ce qui n'est pas vraiment une bonne chose. Un algorithme inspir� de ce que propose la librairie standard du C++ aurait pu �tre plus int�ressant...
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par d�faut
    Mercii beaucoup Emmanuel Deloget pour la r�ponse
    D�sol� pour le retard dema r�plique mon pc s'est plant�

  8. #8
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par d�faut
    Bonsoir

    J'ai ce programme ( c'est la suite en fait du programme pr�cedent ) que j'ai essay� toute la journ�e de comprendre ... ( j'avoue que �a m'a fait une bonne r�vision de C++ )

    Y a pas mal de passage que j'ai pas tr�s bien saisi , merci de m'aider



    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
    // linked list implementation
    
    template <class Elem>
    class LList :public List<Elem> {
    private:
        Link<Elem>* head; 
        Link<Elem>* tail;
        Link<Elem>* fence;
        int leftcnt; // size of left 
        int rightcnt; // size of right , d�ja je ne sais pas pourquoi le prof divise la lsite en deux , ce qui est � droit de fence (�l�ment courant) et ce qui est � gauche du fence //
        void init(){
            fence=tail=head=new Link<Elem>;  //  
            leftcnt=rightcnt=0;
    
    // return link nodes to free stores
    void removeall() {
        while(head!=NULL) { // pourqoi vider la liste alors que on l'a initialis� ??
            fence=head;
            head=head->next;
            delete fence; // les lignes rouges :est ce que �a veut dire qu'on se d�place � partir du head puis on supprime le fence ?? et pourquoi ?
        }
    }
    
    public:
    LList(int size =DefaultListSize)
    {init() ; }  // pourquoi on a fait ce init ???
    
    ~LList () {removeall();} // Destructor
    
    void clear() { removeall ; init() ;}
    
    
    void setStart() {
        fence =head, rightcnt+=leftcnt; // je ne comprend toujours pas pourquoi on divise la liste en left et right ? la fonction setStart fait quoi au juste ??
        leftcnt=0;
    }
    
    void setEnd(){
        fence=tail;leftcnt+=rightcnt;
        rightnct=0;
    
    void next() {
        // don�t move fence if right empty if (fence!=tail) {
        fence=fence->next ; rightcnt--;
        leftcnt++;} //que fait la fonction next ??
    }
    
    int leftlenth() const {  //pourqoi on a ajout� const ??
        return leftcnt ; 
    }
    
    int rightlenth() const {
        return rightcnt;}
    
    bool getValue(Elem& it) const {
        if (rightLength()==0= return false;
        it=fence->next->element;
        return;}   //le roles du code bleu
    Merci encore une fois !

  9. #9
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    'vais essayer de me rattrapper suite � ma b�tise d'hier

    Dans init() je verrais plut�t ceci:
    fence=tail=head=NULL;

    removeall():
    Les �l�ments sont supprim�s un par un depuis head, fence semble ne servir que de variable temporaire.

    LList(int size =DefaultListSize) pourquoi on a fait ce init ???
    Pour initialiser les membres de la classe.

    int leftlenth() const pourqoi on a ajout� const ??
    C'est important, il garantit qu'aucun membre de la classe n'est modifi�.

    bool getValue(Elem& it) const
    (pas return; mais return true;)
    Le code bleu renvoit par r�f�rence l'�l�ment "courant" de la liste, s'il existe.

    Si j'ai bien compris, "fence" joue le r�le de curseur dans la liste.
    Avec setStart() tu positionnes ce curseur en d�but de liste, avec next() tu le fais avancer, et avec getValue() tu r�cup�res la valeur sous ce curseur.

  10. #10
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Janvier 2013
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par d�faut
    Merci beaucoup Camboui c'est beaucoup plus clair
    oui fence c'est l'�lement courant

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