Suppresion d'un element dans une liste chainée
Résolu
zarganomi
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
zarganomi Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
zarganomi Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
SVP pourquoi en exécutant ce programme il n'affiche pas la liste chaîné après la suppression de l'élément 5, pourtant j'ai appelé la fonction Afficher() après la suppression ?
#include <cstdlib>
#include <iostream>
using namespace std;
struct Element
{
int valeur;
Element* suivant;
};
Element* liste = NULL;
void Ajouter(int valeur)
{
Element* element= new Element;
element->valeur = valeur;
element->suivant = liste;
liste = element;
}
Element* Rechercher(int valeur)
{
Element* element = liste;
while(element != NULL && element->valeur != valeur)
element = element->suivant;
return element;
}
void Supprimer(Element* element)
{
Element* precedent = liste;
if(element == liste)
{
liste = NULL;
delete element;
return;
}
while(precedent != NULL && precedent->suivant != element)
precedent = precedent->suivant;
if(precedent == NULL) return;
precedent->suivant = element->suivant;
delete element;
}
void Afficher()
{
Element* element = liste;
while(element != NULL)
{
cout << element->valeur << "\t";
element = element->suivant;
}
cout << endl;
}
int main(void)
{
Element* e;
Ajouter(1);
Ajouter(2);
Ajouter(3);
Ajouter(4);
Ajouter(5);
Afficher();
e = Rechercher(5);
Supprimer(e);
Afficher();
system("pause");
return 0;
}
SVP pourquoi en exécutant ce programme il n'affiche pas la liste chaîné après la suppression de l'élément 5, pourtant j'ai appelé la fonction Afficher() après la suppression ?
#include <cstdlib>
#include <iostream>
using namespace std;
struct Element
{
int valeur;
Element* suivant;
};
Element* liste = NULL;
void Ajouter(int valeur)
{
Element* element= new Element;
element->valeur = valeur;
element->suivant = liste;
liste = element;
}
Element* Rechercher(int valeur)
{
Element* element = liste;
while(element != NULL && element->valeur != valeur)
element = element->suivant;
return element;
}
void Supprimer(Element* element)
{
Element* precedent = liste;
if(element == liste)
{
liste = NULL;
delete element;
return;
}
while(precedent != NULL && precedent->suivant != element)
precedent = precedent->suivant;
if(precedent == NULL) return;
precedent->suivant = element->suivant;
delete element;
}
void Afficher()
{
Element* element = liste;
while(element != NULL)
{
cout << element->valeur << "\t";
element = element->suivant;
}
cout << endl;
}
int main(void)
{
Element* e;
Ajouter(1);
Ajouter(2);
Ajouter(3);
Ajouter(4);
Ajouter(5);
Afficher();
e = Rechercher(5);
Supprimer(e);
Afficher();
system("pause");
return 0;
}
A voir également:
- Supprimer un element d'une liste chainée en c
- Supprimer rond bleu whatsapp - Guide
- Liste déroulante excel - Guide
- Supprimer une page word - Guide
- Liste déroulante en cascade - Guide
- Impossible de supprimer un fichier - Guide
2 réponses
'lut,
-
- tu cherches le pointeur de l'élément contenant 5
- tu appelles
-
Ton code est bien fait dans son ensemble, mais la logique est faite à l'envers pour
Détail: supprime ce
from human import idiocy
del idiocy
Affiche()s'exécute bien mais:
-
Ajouter(int)ajoute un élément au début de la liste
- tu cherches le pointeur de l'élément contenant 5
- tu appelles
Supprimer(Element*)avec, qui 1. libère la mémoire allouée à l'élément 2. définit la globale liste à NULL car l'élément "5" est
liste, donc on a perdu toute référence au reste de la liste.
-
Affiche()constate que
element == NULLet donc n'affiche que
'\n'.
Ton code est bien fait dans son ensemble, mais la logique est faite à l'envers pour
Ajouter(); refait dans le bon sens, ça donne ceci:
void Ajouter(int valeur) { Element* element = new Element; element->valeur = valeur; element->suivant = NULL; if (liste == NULL) { liste = element; } else { Element* precedent = liste; while(precedent->suivant != NULL) precedent = precedent->suivant; precedent->suivant = element; } }Et là, c'est automagique: ça marche!
Détail: supprime ce
system("pause");pas joli et pas portable, remplace-le par un
cout << "Appuyez sur entrée" << endl; cin.get();qui marche tout aussi bien.
from human import idiocy
del idiocy