Tri d'une liste chaînée

Fermé
levaeric Messages postés 3 Date d'inscription vendredi 1 mars 2013 Statut Membre Dernière intervention 14 mars 2013 - 14 mars 2013 à 01:26
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 14 mars 2013 à 16:04
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;
}
}
A voir également:

1 réponse

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
14 mars 2013 à 14:06
Salut levaeric,

Comme avec ton code on ne sait pas ce que c'est que Produit, ListeProduit, et ton message est classé dans C, alors que tu utilises "new" et que tu sembles appeler dans ta boucle des méthodes dans des objets, je crois que globalement, on est un peu perplexes :-)


Dal
0
levaeric Messages postés 3 Date d'inscription vendredi 1 mars 2013 Statut Membre Dernière intervention 14 mars 2013
14 mars 2013 à 14:36
Effectivement on pourrait dire que ma demande n'était pas très explicite alors voici un peu plus de détail :
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 !
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
14 mars 2013 à 16:04
Non, loin de là... toujours le brouillard.

- 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
0