Liste chaine qui affiche pas le resultat
mathieu
-
Dalfab Messages postés 638 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 638 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je travail avec codeblock
je suis capable d'entre les données mais las section affichetout ne fonctionne pas pourquoi
merci a l'avance de la reponse
je travail avec codeblock
je suis capable d'entre les données mais las section affichetout ne fonctionne pas pourquoi
merci a l'avance de la reponse
#include <iostream>
using namespace std;
enum {kpluspetit, kplusgrand, kidentique};
class donnees
{
public:
donnees( int val):mavaleur(val){}
~donnees(){}
int compare (const donnees &);
void affiche()
{
cout<<mavaleur<<endl;
}
private:
int mavaleur;
};
int donnees::compare (const donnees & autresdonnees)
{
if(mavaleur<autresdonnees.mavaleur)
return kpluspetit;
if (mavaleur >autresdonnees.mavaleur)
return kplusgrand;
else
return kidentique;
}
class noeud;
class noeudtete;
class noeudqueue;
class noeudinterne;
class noeud
{
public:
noeud(){}
virtual~noeud(){}
virtual noeud * insere (donnees* lesdonnees)=0;
virtual void affiche()=0;
private:
};
class noeudinterne: public noeud
{
public:
noeudinterne (donnees* lesdonnees, noeud * suivant);
~noeudinterne (){ delete lesuivant; delete mesdonnees;}
virtual noeud* insere (donnees* lesdonnees);
virtual void affiche(){mesdonnees->affiche();
lesuivant->affiche();}
private:
donnees * mesdonnees;
noeud * lesuivant;
};
noeudinterne::noeudinterne(donnees * lesdonnees, noeud *suivant):
mesdonnees (lesdonnees), lesuivant (suivant)
{
}
noeud * noeudinterne:: insere (donnees* lesdonnees)
{
int resultat=mesdonnees->compare(*lesdonnees);
switch (resultat)
{
case kidentique:
case kplusgrand:
{
noeudinterne* donneesnoeud= new noeudinterne(lesdonnees,this);
return donneesnoeud;
}
case kpluspetit:
lesuivant= lesuivant ->insere(lesdonnees);
return this;}
return this;
}
class noeudqueue:public noeud
{
public:
noeudqueue(){}
~noeudqueue (){}
virtual noeud*insere(donnees * lesdonnees);
virtual void affiche(){}
private:
};
noeud * noeudqueue:: insere (donnees* lesdonnees)
{
noeudinterne * donneesnoeud=
new noeudinterne (lesdonnees,this);
return donneesnoeud;
}
class noeudtete:public noeud
{
public:
noeudtete();
~noeudtete(){delete lesuivant;}
virtual noeud * insere(donnees * lesdonnees);
virtual void affiche(){lesuivant->affiche();}
private:
noeud * lesuivant;
};
noeudtete::noeudtete()
{
lesuivant = new noeudqueue;
}
noeud * noeudtete:: insere (donnees*lesdonnees)
{
lesuivant =lesuivant->insere(lesdonnees);
return this;
}
class listechainee
{
public:
listechainee ();
~listechainee(){delete matete;}
void insere (donnees * lesdonnees);
void affichetout(){matete->affiche();}
private:
noeudtete*matete;
};
listechainee::listechainee()
{
matete= new noeudtete;
}
void listechainee:: insere (donnees *pdonnees)
{
matete->insere(pdonnees);
}
int main()
{
donnees *pdonnees;
int val;
listechainee l1;
int n;
for (n=0;n<20;n++)
{
cout<<"inserer une valeur (0 pour arreter): ";
cin>>val;
if(val==0)
break;
pdonnees=new donnees(val);
l1.insere(pdonnees);
}
l1.affichetout();
return 0;
}
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
1 réponse
-
Bonjour,
J'ai regardé rapidement. Je n'ai pas vu de problème particulier à part que gérer les extrémités comme des cas particuliers ça fait mal à la tête surtout que tes indentations ajoutent aussi à la confusion.
Bravo pour avoir réussi à écrire ça, pourquoi faire simple quand on peut faire compliqué.
Ta question aussi n'aide pas "affichetout ne fonctionne pas". Elle fait quoi? Dans quel cas?