Tri d'une liste chaînée
levaeric
Messages postés
3
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,
Je test présentement le tri d'une liste chainé avec strcmp et j'aimerais que l'on m'explique la s'il ma façon d'assigner les valeurs est correct .
Je crois qu'il me manque une variable pour récupérer une valeur
void trierListeDescription (Produit* tabProduit)
{
// Variable de noeud temporaire pour récupérer les noeuds produit comparés
Produit* MesPoduitsTemp = new Produit;
// Liste de produits pour accéder aux nombres de noeuds contenus dans ma liste
ListeProduit MaListeProduits ;
int i;
while(tabProduit != NULL)
{
for(i=0; i < MaListeProduits.taille -1 ;i++)
{
// Assignation d'un noeud produit à la variable temporaire
MesPoduitsTemp = tabProduit;
if(strcmp(MesPoduitsTemp->description.c_str(),tabProduit->description.c_str()) > 0)
{
MesPoduitsTemp = tabProduit;
tabProduit = tabProduit->produitSuiv;
tabProduit = MesPoduitsTemp;
}
}
tabProduit = tabProduit->produitSuiv;
}
}
Je test présentement le tri d'une liste chainé avec strcmp et j'aimerais que l'on m'explique la s'il ma façon d'assigner les valeurs est correct .
Je crois qu'il me manque une variable pour récupérer une valeur
void trierListeDescription (Produit* tabProduit)
{
// Variable de noeud temporaire pour récupérer les noeuds produit comparés
Produit* MesPoduitsTemp = new Produit;
// Liste de produits pour accéder aux nombres de noeuds contenus dans ma liste
ListeProduit MaListeProduits ;
int i;
while(tabProduit != NULL)
{
for(i=0; i < MaListeProduits.taille -1 ;i++)
{
// Assignation d'un noeud produit à la variable temporaire
MesPoduitsTemp = tabProduit;
if(strcmp(MesPoduitsTemp->description.c_str(),tabProduit->description.c_str()) > 0)
{
MesPoduitsTemp = tabProduit;
tabProduit = tabProduit->produitSuiv;
tabProduit = MesPoduitsTemp;
}
}
tabProduit = tabProduit->produitSuiv;
}
}
A voir également:
- Tri d'une liste chaînée
- Liste déroulante excel - Guide
- Comment faire un tri personnalisé sur excel - Guide
- Liste code ascii - Guide
- Logiciel tri photo - Guide
- Liste déroulante en cascade - Guide
Produit est une structure comportant les enregistrement suivants:
struct Produit
{
int noProduit;
std::string description;
double prixUnitaire;
int quantite;
Produit* produitSuiv;
}
ListeProduit est le controleur de mes noeuds qui conserve l'adresse dul debut et la fin de mes noeuds ainsi que le nombre de noeus dans taille
struct ListeProduit
{
Produit* tete;
Produit* queue;
int taille;
}
Donc en résumé je dois trié le noeud produit par ordre alphabétique du champ description(celui-ci ne comporte aucun accent)
Est-ce plus clair comme cela ?
D'Avance merci !
- ce n'est pas du C
- cela ne compile pas en C
- tes structures ne sont pas des types, sans les aliaser avec typedef
- char description[255]; (par exemple) je connais, mais pas std::string description;
- new n'existe pas en C, il faut faire malloc, mais dans ton cas, si tu utilises des pointeurs sur des structures, tu n'as pas besoin d'allouer l'espace correspondant, mais seulement disposer d'un pointeur, donc Produit* MesPoduitsTemp; suffit
- en faisant ListeProduit MaListeProduits; tu déclares une variable, mais tu ne l'initialises pas
- donc MaListeProduits.taille contient une valeur imprédictible, utiliser cette valeur pour une boucle for, c'est un moyen d'explorer une autre dimension :-)
- MesPoduitsTemp = tabProduit puisque ce sont des pointeurs, tu fais pointer MesPoduitsTemp vers exactement la même chose que tabProduit
- donc dans strcmp(MesPoduitsTemp->description, tabProduit->description) tu compares exactement la même chose
- le contenu du if n'est jamais exécuté, puisque le résultat vaut toujours 0 comme tu compares toujours des données identiques
- de toutes façons le contenu du if ne fait rien, puisque MesPoduitsTemp = tabProduit; tabProduit = tabProduit->produitSuiv; tabProduit = MesPoduitsTemp; ne fait que remettre tabProduit dans le même état
Dal