[C++] ,liste simplement chainnée

Résolu/Fermé
sifane1 Messages postés 1 Date d'inscription lundi 16 janvier 2012 Statut Membre Dernière intervention 16 janvier 2012 - Modifié par sifane1 le 16/01/2012 à 20:40
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 17 janv. 2012 à 11:11
Bonjour tout le monde,
Je m'appelle amine , je suis sur un mini projet de géstion d'une bibliothéque en langague C++. Le probléme c'est que j'ai tout un travail qui m'attend mais je beug sur un bout de code que je trouve logique , sans erreurs , mais qui beug à chaque fois que j'execute mon programme. Alors j'ai pensé à demander de l'aide auprés des intérnautes :) .
void Biblio::Suprimmer(string titre)
{
Document*k=tete,*p=tete->suivant; // deux pointeur qui ce précédent et qui vont parcourir ma bibliotheque. ( tete est la tete de ma biblio)
if(k==NULL) // bibliotheque vide
cout<<"la bibliotheque est dejas vide"<<endl;
else
{
if(k->Gettitre()==titre) // supression au debut de ma bibliotheque
{
tete=p;
delete k;
}
else// supression d'un element dans ma bibliotheque
{
while(p->suivant!=NULL)//!=null
{
if(p->Gettitre()==titre) // avec des test j'ai constaté que c'est ce qu'il y'a à l'intérieur du if qui fait beuger le programme, pourtant c'est juste non? :/.
{

k->suivant=p->suivant;
delete p;
}
else
{
p=p->suivant;
k=k->suivant;
}
}
if(p->Gettitre()==titre) //supression d'un element à la fin
{
k->suivant=NULL;
delete p;
}
else
cout<<" le document a suprimer ne figure pas dans la bibliotheque"<<endl;

}
}





1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
17 janv. 2012 à 11:11
void Biblio::Suprimmer(string titre)
{
Document*k=tete,*p=tete->suivant; // deux pointeur qui ce précédent et qui vont parcourir ma bibliotheque. ( tete est la tete de ma biblio)
if(k==NULL) // bibliotheque vide
cout<<"la bibliotheque est dejas vide"<<endl;
else
{
if(k->Gettitre()==titre) // supression au debut de ma bibliotheque
{
tete=p;
delete k;
}
else// supression d'un element dans ma bibliotheque
{
while(p->suivant!=NULL)//!=null// si tu n' a qu'un element (tete->suivant=0) p est nul et p->suivant retourne une erreur de seg.
{
  if(p->Gettitre()==titre) // avec des test j'ai constaté que c'est ce qu'il y'a à           l'intérieur du if qui fait beuger le programme, pourtant c'est juste non? :/.
   {

     k->suivant=p->suivant;
     delete p;
   }
   else
   {
      p=p->suivant;
      k=k->suivant;
   }
}
if(p->Gettitre()==titre) //supression d'un element à la fin
{
k->suivant=NULL;
delete p;
}
else
cout<<" le document a suprimer ne figure pas dans la bibliotheque"<<endl;

}
}

En fait, je pense while(p!=NULL) devrait suffire.
normalement la fin doit être incluse dedans (pas la peine de faire une traitement particulier.
0