CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c++]Trier une liste chainée

psg_is_majic
psg_is_majic
Niveau 10
29 mars 2008 à 20:03:45

void load(Contact **Tete)
{
FILE *contact = NULL;
Contact *Tete;
char NOM[TAILLE_MAX] = "";
char PRENOM[TAILLE_MAX] = "";
char NUMERO[TAILLE_MAX] = "";
char EMAIL[TAILLE_MAX] = "";
*Tete = NULL;

system("cls");
contact = fopen("contact.txt", "r");

if (contact != NULL)
{
while (fscanf(contact, "%s %s %s %s", NOM, PRENOM, NUMERO, EMAIL ) != NULL)
{
Contact *Nouveau = (Contact*)malloc(sizeof(Contact));
sprintf(Nouveau->nom, "%s",NOM);
sprintf(Nouveau->prenom, "%s",PRENOM);
sprintf(Nouveau->numero, "%s",NUMERO);
sprintf(Nouveau->email, "%s",EMAIL);

Nouveau->suivant = (*Tete);
(*Tete) = Nouveau;
}
}
fclose(contact);

system("pause");

}

bonjour,
Voilà ma fontion qui permet de mettre les contacts dans une liste chainée à partir d'un fichier .txt
Je voudrais trier cette liste selon les NOM des contacts, je n'y arrive pas sans passer par des tableaux :'(
J'ai besoin de votre aide
Merci

dnob700
dnob700
Niveau 10
29 mars 2008 à 20:18:12
  1. include <list>
  2. include <string>

using namespace std;
struct Contact
{
string nom,prenom, ...;
bool operaor<(const Contact& c) const
{
return (nom < c.nom) || (prenom < c.prenom);
}
};

...

list<Contact> l;

while (fscanf(contact, "%s %s %s %s", NOM, PRENOM, NUMERO, EMAIL ) != NULL)
{
Contact *Nouveau = new Contact;
Nouveau->nom = NOM;
...
l.push_back(*Nouveau);
}
l.sort()

Quitte à mettre C++ dans le titre, autan faire réellement du C++ plutôt que du C. Pour ce genre de chose, c'est quand même autrement plus simple.

psg_is_majic
psg_is_majic
Niveau 10
29 mars 2008 à 20:31:50

je n'ai jamais vu ce que tu utilises en cours, je fais avec mes connaissances (peu développées)
peut être est-ce du c alors, pourtant on utilise visual c++ 6.0 pour compiler

dnob700
dnob700
Niveau 10
29 mars 2008 à 21:13:26

oui, mais malheureusement ce que tu utilise c'est bien du C et pas du C++.

Pour trier des listes chaînées, l'algorithme le plus adapté est celui du tri fusion :

ta fonction trie prend en argument une liste chaînées.

Elle regarde si ça longueur est au moins de deux éléments.

Si oui, elle découpe cette liste chaînée en deux listes (par exemple en prenant un élément sur deux de la liste de départ pour chaque liste).

Puis elle trie chacune des petites liste en s'appelant elle même avec ces petites liste.

A ce moment là, en supposant que la fonction de trie fonctionne, on a deux liste triées. Il ne reste plus qu'à les fusionner, c'est à dire que tu recrée une seule liste chaînée en prenant le premier élement de l'une des deux liste (celui des deux qui est le plus petit) puis tu rajoutte derrière le plus petit des nouvelles tête de liste et ainsi de suite jusqu'à avoir remis tout les éléments.

Et hop ! ta liste est triée.

Si mes explication ne te suffise pas, regarde "tri fusion" sur google.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment