IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Trier une liste par date


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Points : 9
    Points
    9
    Par défaut Trier une liste par date
    Bonsoir,

    J'aimerais trier ma liste par la date la plus proche à la date la plus loin
    en utilisant ces structures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    typedef struct{
    	int j;
    	int m;
    	int a;
    }dat;
    typedef struct{
    	int h;
    	int mn;
    }heu;
    typedef struct{
    	char objet[25];
    	char lieu[25];
    	dat date;
    	heu heure;
    }evnt;
    typedef struct cellule{
    	evnt valeur;
        struct cellule *suivant;
    }cellule;
    typedef cellule *liste;
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 387
    Points : 23 703
    Points
    23 703
    Par défaut
    Regarde du côté de qsort().

  3. #3
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    sauf que si c'est organisé en liste (certes, très rudimentaire), qsort va mettre "un beau bordel" au niveau du champ "suivant" dans les cellules, non ? (ou alors j'ai loupé quelque chose). D'ailleurs, que mettre en premier (de mémoire) paramètre ? Qsort ne peut pas être utilisé ici, les "cellules" ne sont pas jointives, les unes derrière les autres, en mémoire.

    Un tableau "tout bête" serait peut-être plus approprié et permettrait d'utiliser qsort. Si la liste est incontournable (dans le sens obligatoire), le tri va être plus sport ...
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 387
    Points : 23 703
    Points
    23 703
    Par défaut
    Oui, c'est vrai que j'ai répondu sans faire défiler le code source et que j'ai omis le fait qu'il s'agit d'une liste chaînée.

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    C'est pas grave, ça nous arrive à tous, moi le premier.

    Je ne résiste pas à mettre ici un lien vers une vidéo montrant comment fonctionnent le tri à bulle et un quick-sort [ame="http://www.youtube.com/watch?v=vxENKlcs2Tw&feature=fvwrel"]Visualization of Quick sort[/ame].
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Points : 9
    Points
    9
    Par défaut
    Merci pour vos réponses, mais comment transformer une liste en un tableau ? càd une case de tableau, qu'est ce qu'elle contient ?

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 387
    Points : 23 703
    Points
    23 703
    Par défaut
    Citation Envoyé par autre Voir le message
    Merci pour vos réponses, mais comment transformer une liste en un tableau ? càd une case de tableau, qu'est ce qu'elle contient ?
    Elle contient ce que tu veux, pourvu que ce soit un type connu par le C et que toutes les cases soient du même type. Lorsque tu écris « char objet[25] » pour stocker un nom, tu définis en réalité un tableau de 25 caractères consécutifs.

    Dès lors, rien ne t'empêche de faire un tableau de structures. Il est alors aussi facile de permuter ses cases que s'il s'agissait de types natifs ordinaires. Tu peux écrire une fonction qui « compare deux cases » en comparant en réalité les membres de ces structures respectives, et la passer à qsort() qui, elle, effectuera le tri en fonction des résultats renvoyés par ta fonction de comparaison.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Points : 9
    Points
    9
    Par défaut
    mais comment déclarer un tableau de structure et c'est quoi qsort() ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    un tableau de structures est comme un tableau normal :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct ... {...} MaStruct ;
     
    MaStruct Table[10] ;

    par exemple


    Pour qsort, il suffit de regarder le man pages :

    qsort
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par autre Voir le message
    mais comment déclarer un tableau de structure et c'est quoi qsort() ?
    Salut
    qsort() est une fonction générique permettant de trier un tableau de n'importe quoi.
    Elle fonctionne sur le principe que les éléments d'un tableau sont toujours contigus en mémoire. Donc qu'on peut, en passant par des manipulation d'octets, permuter 2 éléments mal rangés.
    Donc cette fonction ne sait pas ce qu'elle manipule mais comme elle connait le nombre d'éléments et la taille de chaque élément, elle sait permuter 2 éléments.
    Tout ce que l'utilisateur a à faire est d'écrire une fonction xxx() qui sait comparer 2 éléments. Et ça il peut le faire parce que lui il sait ce qu'il manipule.
    Donc il écrit sa fonction xxx() selon le schéma suivant: xxx() renvoie
    -1 si élément1 < élément2
    0 si élément1 = élément2
    1 si élément1 > élément2
    Puis il appelle qsort en lui passant
    - l'adresse du tableau
    - le nombre d'éléments
    - la taille d'un élément
    - l'adresse de la fonction xxx()
    Et à partir de là, qsort() se débrouille pour tout trier.

    Accessoirement ta question initiale n'a aucun sens. Car on utilise généralement une liste pour avoir des éléments toujours triés (l'insertion d'un élément au milieu de la liste étant très facile puisque cela ne déplace que 2 pointeurs). Donc avoir une liste d'éléments non triés est complètement idiot puisque la liste n'est utile que si les éléments sont toujours triés. S'ils ne le sont pas, alors la liste n'a plus du tout d'utilité et autant revenir au tableau simple (qu'on peut agrandir à coup de realloc et éventuellement trier plus tard avec qsort)...

    Citation Envoyé par plxpy Voir le message
    Je ne résiste pas à mettre ici un lien vers une vidéo montrant comment fonctionnent le tri à bulle et un quick-sort
    Très amusant surtout le petit match final. Il faut toutefois se le passer plusieurs fois pour bien percevoir l'effet récursif du qsort...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut
    salut !

    as-tu bien besoin de trier ta liste ? l'ordre initial est peut-être important. ce qui ne coûte pas cher, c'est de créer un tableau d'index (pointeur vers cellule) et de trier par qsort (ou autre) ce tableau, sans avoir à toucher à ta liste.

    A+
    Don't want money. Got money. Want admiration.
    (A tribute to SSG)

Discussions similaires

  1. [VxiR2] Trier une liste de dates
    Par tunis71187 dans le forum Deski
    Réponses: 5
    Dernier message: 14/12/2011, 14h19
  2. Tri d'une liste par date
    Par developpeur_débutant dans le forum Général Java
    Réponses: 5
    Dernier message: 24/11/2011, 10h09
  3. trier une colonne par date
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/06/2008, 08h30
  4. trier une liste par colonnes
    Par Sniper37 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/10/2007, 10h19
  5. Trier une colonne par date
    Par foobar42 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/07/2006, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo