Maximum dans une liste chainée
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Maximum dans une liste chainée



  1. #1
    deyni

    Maximum dans une liste chainée


    ------

    Bonjour, je dois trouver le maximum dans ma liste chainée.
    Après il faut que je trie ma liste chainée dans l'ordre decroissant(mais j'y suis pas encore)

    Voilà ce que j'ai fait:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct liste {
    	int nb;
    	struct liste *suivant;
    }LISTE;
    
    
    int main(){
    
    LISTE *l1 = (char*)malloc(sizeof(LISTE));
    LISTE *l2 = (char*)malloc(sizeof(LISTE));
    LISTE *l3 = (char*)malloc(sizeof(LISTE));
    LISTE *l4 = (char*)malloc(sizeof(LISTE));
    LISTE *temp = l1;
    
    l1->nb = 4;
    l2->nb = 7;
    l3->nb = 1;
    l4->nb = 14;
    
    l1->suivant = l2;
    l2->suivant = l3;
    l3->suivant = l4;
    l4->suivant = NULL;
    
    int max = l1->nb;
    
    while (temp->suivant ) {
            if(temp->suivant > max)
                  max = temp->suivant;
            temp = temp->suivant;
    }
    
    printf("%d", max);
    
    return 0;
    }

    Ca ne marche pas.
    Je suppose que le 1er element est le maximum puis je le compare aux autres.



    Merci.

    -----
    Deynid'oiseaux partout !! :rire:

  2. #2
    fred1599

    Re : Maximum dans une liste chainée

    temp->suivant n'est pas un entier, attention à ne pas comparer tout et n'importe quoi...

  3. #3
    Dlzlogic

    Re : Maximum dans une liste chainée

    Bonjour,
    Je ne comprends pas pourquoi vous voulez la trier.
    Pour trouver le maximum, je suppose la valeur de nb la plus grande, il suffit de parcourir la liste et de comparer chaque nb, garder le plus grand pour la comparaison suivante.
    Concernant la mise à jour de votre liste, c'est tout de même un peu simplifié. Vous devriez au moins avoir une fonction qui pourrait s'appeler
    LISTE *AddVal(LISTE *pre, int nb);
    Qui prendrait en paramètre un pointeur sur le dernier élément créé et la valeur nb, et qui renverrait en pointeur sur l'élément créé.
    Le tri d'une liste n'est nécessaire que si l'ordre des éléments au fur et à mesure de leur création n'est pas l'ordre dans lequel la liste doit être utilisée.
    Par exemple la liste est créé dans l'ordre chronologique des inscriptions, on veut l'utiliser suivant l'ordre alphabétique des inscrits.

  4. #4
    deyni

    Re : Maximum dans une liste chainée

    Bonour, et merci.

    je sais que temp->suivant n'est pas un entier(mon compilateur me lance un warning), mais je ne sais pas comment faire.

    Ce que je n'arrive pas à faire est la comparaison.
    Je n'arrive pas à comparer l'element courant, avec le reste de la liste chainée.
    Deynid'oiseaux partout !! :rire:

  5. A voir en vidéo sur Futura
  6. #5
    PA5CAL

    Re : Maximum dans une liste chainée

    Bonsoir

    Et les « nb » qui ne sont jamais utilisés, ils servent à quoi dans l'affaire ? À décorer le programme ?
    Dernière modification par PA5CAL ; 31/01/2013 à 16h55.

  7. #6
    fred1599

    Re : Maximum dans une liste chainée

    Pourtant t'es pas loin, ça me semblait logique après mon intervention que tu saches de quoi je parle, mais... apparemment ça n'est pas parlant

    Code:
    while (temp->suivant ) {
            if(temp->suivant->nb > max)
                  max = temp->suivant->nb;
            temp = temp->suivant;
    Sinon les cast devant les malloc, inutiles en C

    Attention de bien "free", la mémoire allouée
    Dernière modification par fred1599 ; 01/02/2013 à 09h05.

  8. #7
    snoosha

    Re : Maximum dans une liste chainée

    Citation Envoyé par PA5CAL Voir le message
    Bonsoir
    Et les « nb » qui ne sont jamais utilisés, ils servent à quoi dans l'affaire ? À décorer le programme ?
    je comprends pas surtout qui font en sorte de l'aider
    je t'aide mais tu m'organises un rencart avec ta copine
    non ?
    debrouille toi alors

  9. #8
    PA5CAL

    Re : Maximum dans une liste chainée

    Citation Envoyé par snoosha Voir le message
    je comprends pas surtout qui font en sorte de l'aider
    je t'aide mais tu m'organises un rencart avec ta copine
    non ?
    debrouille toi alors
    Relire la note Exercices, Devoirs, Forum électronique et règles à rappeler.

    Aider ne signifie pas faire le travail à la place du demandeur. Au contraire, c'est en le forçant à travailler par lui-même qu'on l'aide. Et c'est ce que j'ai fait : j'ai désigné la cause de son erreur. Et pas plus. À lui de réfléchir pour trouver le pourquoi du comment et apporter la correction nécessaire.
    Dernière modification par PA5CAL ; 01/02/2013 à 10h43.

  10. #9
    PA5CAL

    Re : Maximum dans une liste chainée

    Citation Envoyé par fred1599 Voir le message
    Sinon les cast devant les malloc, inutiles en C
    En pratique, certains compilateurs l'imposent.

  11. #10
    fred1599

    Re : Maximum dans une liste chainée

    En pratique, certains compilateurs l'imposent.
    Ah alors je veux bien apprendre lesquels dans ce cas, c'est bon pour ma culture.

    Je te laisse lire ce paragraphe avant de m'annoncer des compilateurs obsolètes par exemple...

  12. #11
    Dlzlogic

    Re : Maximum dans une liste chainée

    Bonjour,
    Le conseil que je pourrais donner à Deyni, c'est de savoir ce qu'est une liste chainée.
    1- un liste de quoi ?
    2- comment on parcourt cette liste ?
    3- que représente une allocation mémoire ?
    4- si on alloue de la mémoire, comment on la libère ?

  13. #12
    PA5CAL

    Re : Maximum dans une liste chainée

    Citation Envoyé par fred1599 Voir le message
    Je te laisse lire ce paragraphe avant de m'annoncer des compilateurs obsolètes par exemple...
    Je pressens que ta définition de « compilateur obsolète » recoupe celle de « qui ne respecte pas scrupuleusement la dernière version de la norme ». Mais je t'arrêt toute de suite, ça n'est pas celle qui prévaut dans les entreprises. Un compilateur ne devient obsolète qu'à partir du jour où on ne peut plus l'utiliser.

    Si l'ANSI prévoit en effet depuis longtemps qu'en C le void dispense d'un cast, ça reste quand même de la théorie universitaire. La réalité du terrain, celle à laquelle on est confronté dans la vraie vie, c'est que quelques compilateurs encore actuellement utilisés ne sont pas complètement conformes à la norme, parce qu'un certain nombre d'éditeurs d'outils de développement qui s'en réclament du bout des lèvre ne la respectent pas jusque dans les détails, pour diverses raisons, pratiques, commerciales ou historiques. Les principales raisons sont souvent que leur outil est bâti autour d'un compilateur C++ ou d'une ancienne version de compilateur C.

    Ma remarque n'est qu'une mise en garde sur cet état de fait.

    (PS: 90% des compilateurs que j'ai utilisés dans ma carrière n'étaient pas totalement conformes à 100% à la norme)
    Dernière modification par PA5CAL ; 01/02/2013 à 13h02.

  14. #13
    PA5CAL

    Re : Maximum dans une liste chainée

    J'ai d'ailleurs dû expliquer ce point pas plus tard que ce matin à un jeune qui codait un programme pour son Arduino, dont la doc indique pourtant « une programmation en langage C ».

  15. #14
    Chanur

    Re : Maximum dans une liste chainée

    Je crois qu'en s'écarte un peu du sujet, d'autant que mettre un cast devant un malloc c'est quand même pas très grave ..
    Sérieusement, ça me paraît impossible d'avoir écrit ce petit programme en n'ayant rien compris à ce qu'est une structure et une liste chaînée : tout y est : la déclaration, l'initialisation de chaque champ et la boucle pour balayer la liste.
    Donc, deyni, soit tu l'as purement et simplement recopié sans rien y comprendre, soit tu dois comprendre pourquoi la ligne "max = temp->suivant;" est absurde.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  16. #15
    polo974

    Re : Maximum dans une liste chainée

    pourquoi continuer à bosser sur le suivant?
    s'il existe, on bascule dessus et ensuite, on teste
    Donc déjà, en bossant dans le bon ordre, ça semble plus simple, non:
    Code:
        while (temp->suivant )
        {
            temp = temp->suivant;
             if(temp->... > max)
                   max = temp->...; 
        }
    remplacer les ... par ce qu'il faut pour comparer ce qui est comparable.
    Dernière modification par polo974 ; 01/02/2013 à 17h58.
    Jusqu'ici tout va bien...

  17. #16
    Dlzlogic

    Re : Maximum dans une liste chainée

    Oui, bien sûr, mais notre ami avait précisé qu'il commençait par faire un tri.
    Pour les listes chainées, j'emploie la syntaxe suivante :
    Code:
    // d'abord j'ai pris soin de me souvenir du premier de la liste : LISTE *Prem;
    int compt=0;
    for (LISTE *ptr=Prem; ptr ; ptr=ptr->suiv)
    {
      if (ptr->machin == [ce que je veux])
      {
        printf("Houpy, j'ai trouvé \n");
        break;
      }
      compt++;
    }
    printf("il a fallu lire %d élément pour trouver celui que je cherchais \n",compt);
    Naturellement, ce n'est pas la réponse à la question de l'exo.

  18. #17
    deyni

    Re : Maximum dans une liste chainée

    Bonjour,

    merci de vos réponses.

    Je n'attends pas un code qui tombe, j'essai de faire mon exercice et de le finir. Pour preuve j'ai posté le code. Des fois à force de voir les membres qui " tournent autour qu pot", où les messages s'enchainent, le posteur "renonce" à la réponse , contrairement à la section informatique, où les membres nous aident bien. Ils ne fournissent pas un code, on comprends bien ce qu'il manque et on a une réponse. Tout ce qui est fait n'est pas contraire à la charte.

    J'ai tapé tout mon code tout seul, en comprenant ce que j'ai fais. Je ne l'ai pas copier/coller, et j'attends qu'on me le corrige.

    Mon compilateur accepte que je ne lui met pas le transtypage, mais il me met un warning. Peut-être parce que je fais mon makefile toujours avec -ansi -pedantic....

    fred1599 avait raison dans sa première remarque, je comparais un une structure(->suivant) avec un entier. Alors qu'il faut comparer:
    ->suivant->entier avec un entier.

    Je vais maintenant faire le tri.


    Merci
    Deynid'oiseaux partout !! :rire:

  19. #18
    danyvio

    Re : Maximum dans une liste chainée

    Je n'ai fait que survoler la discussion, mais à mon sens, il faut :trier la liste de manière décroissante, l'élément max sera forcément le premier de la liste triée.

    Il n'y a pas lieu d'écrire deux routines distinctes.
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  20. #19
    Dlzlogic

    Re : Maximum dans une liste chainée

    Bonjour Dany,
    [un an de plus, tout à coup !]
    J'ai relu l'énoncé, et en fait je n'avais pas lu que la seconde question était justement de trier la liste.
    Je pense qu'il est dommage que l'énoncé n'ait prévu qu'un un seul entier dans la structure, ça retire tout intérêt à une liste chainée. Ca double l'occupation mémoire sans rien apporter d'autre.
    Ca me fait penser à un autre exercice lu dernièrement, il s'agissait d'ailleurs aussi de tri, apparemment le professeur avait prévu que les élèves utilisent une valeur temporaire, mais là quelqu'un a proposé une solution, à l'évidence plus directe, mais sans intérêt pédagogique.
    Ceci pour dire que dans le cas d'exercice, le libellé doit être strictement recopié, et dans le cas de question, type professionnelle, au contraire, il vaut mieux expliquer le contexte.
    Bonne journée.

Discussions similaires

  1. Creer une liste chainée en JAVA
    Par Evil.Saien dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 31/05/2012, 18h30
  2. [C]Liste chainée
    Par invite8b421ec7 dans le forum Programmation et langages, Algorithmique
    Réponses: 29
    Dernier message: 09/04/2011, 11h09
  3. liste chainée
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 01/01/2011, 19h18
  4. liste chainée en C
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 01/01/2011, 11h31
  5. liste chainée
    Par invite69686042 dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 11/12/2010, 15h35