nickydaquick
- Messages postés
-
416
- Date d'inscription
- vendredi 31 janvier 2003
- Statut
- Membre
- Dernière intervention
- 19 décembre 2013
2
Bonjour l'ami,
voici un exemple en c++:
/******************************************
* Declaration header
******************************************/
typedef struct
{
const int __valeur;
PSNoeud __suivant
}SNoeud, *PSNoeud;
class SListe
{
public:
SListe(void);
~SListe();
const bool ajouterValeur(const int valeur, const unsigned rang=0);
const bool enleverValeur(const int valeur, const unsigned rang=0);
const unsigned rechercherValeur(const int valeur) const;
const bool remplacerValeur(const int valeur, const unsigned rang=0);
void viderListe(void);
inline const unsigned taille(void)const{return __taille;}
private:
unsigned __taille;
SNoeud __racine;
};
/*****************************************
* Implementation source
*****************************************/
SListe::SListe(void)
{
__racine.__suivant = &__racine;
__taille = 0;
}//cons
SListe::~SListe()
{
viderListe();
}//dest
const bool SListe::ajouterValeur(const int valeur, const unsigned rang)
{
PSNoeud noeud = new Noeud();
if(!noeud)return false;
noeud->__valeur = valeur;
const PSNoeud const racine = &__racine;
PSNoeud iterateur = &__racine;
unsigned compteur = rang;
noeud->__suivant = &__racine;
while(compteur-- && iterateur->__suivant!=racine)iterateur = iterateur = iterateur->__suivant;
noeud->__suivant = iterateur->__suivant;
iterateur->__suivant = noeud;
++__taille;
return true;
}//met
SListe::const bool enleverValeur(const int valeur, const unsigned rang)
{
if(__taille==0)return false;
bool premierTrouve = (rang>=__taille);
PSNoeud iterateur &__racine, noeudAdetruire 0;
unsigned compteur = rang;
do
{
if(iterateur->__suivant->__valeur == valeur)
{
noeudAdetruire = iterateur->__suivant;
if(premierTrouve)break;
}//if
}while(compteur--);//while
if(!noeudAdetruire)return false;
iterateur->__suivant = noeudAdetruire->__suivant;
delete noeudAdetruire;
--__taille;
return true;
}//met
const unsigned SListe::rechercherValeur(const int valeur) const
{
if(__taille ==0 ) return __taille+1; unsigned rang 0, taille __taille;
PSNoeud iterateur = __racine.__suivant;
while(iterateur->valeur!=valeur && taille--)
{
iterateur = iterateur->__suivant;
++rang;
}//while
if(iterateur==&_racine)return __taille+1;
return rang;
}//met
const bool SListe::remplacerValeur(const int valeur, const unsigned rang)
{
if(rang>=__taille || __taille==0)return false;
bool premierTrouve = (rang>=__taille);
PSNoeud iterateur = __racine.__suivant;
unsigned compteur = rang;
do
{
if(iterateur->__valeur == valeur)
{
if(compteur)continue;
if(premierTrouve)
{
iterateur->__valeur = valeur;
break;
}//if
}//if
}while(compteur--);//while
if(iterateur==&_racine)return false;
iterateur->__valeur = valeur;
}//met
SListe::viderListe(void)
{
if(__taille)
{
PSNoeud iterateur = __racine.__suivant, noeudAdetruire=0;
__racine.__suivant = &racine;
while(iterateur!=&__racine)
{
noeudAdetruire = iterateur;
iterateur = iterateur->__suivant;
delete noeudAdetruire;
}//while
}//if
__taille = 0;
}//met
code tape intuitivement, j'espere que ca va aider, Salut
je suis heureux de faire partie d'une grande famille ...!