Bonsoir j'ai besoin d'aide pour résoudre un exercice sur les listes chainé.
Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une moto sont : marque couleur vitesse prix.
Ça ne veut rien dire une liste chainée fifo. Bien sur, on peut insérer un élément dans une liste chainée toujours à la fin ou toujours au début, on peut supprimer un élément toujours au début ou toujours à la fin, mais pour le fifo, ça implique plutot un pile.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
FIFO : First In, First Out (Premier entré, premier sorti).
edgarjacobs a écrit:
mais pour le fifo, ça implique plutot un pile.
C'est plutôt une file ?! non ?
CheickDiakité a écrit:
Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une moto sont : marque couleur vitesse prix.
Un FIFO c'est une file pas une pile. Ce qu'une lettre ça peut faire de différence: p/f ... @CheickDiakité: As-tu une idée comment implémenter une liste chaînée? Connais-tu les structures? Tu en auras besoin pour la liste chaînée et les informations sur tes moto. Tu auras besoin de connaissances sur les pointeurs. As-tu un peu de code à nous présenter? edit:
rouIoude a écrit: Citation CheickDiakité a écrit: Citation Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une moto sont : marque couleur vitesse prix. Fin de la citation Désolé, mais j'ai rien compris ! Fin de la citation On fait une liste chaînée avec pointeur sur le début et un sur la fin. Les info sont celles données ci-haut. On peut insérer à un bout et effacer à l'autre. Je choisirais d'ajouter à la fin et de retirer au début, mais bon ... On parcours la lisste et on affiche celles dont le prix est supérieur à 450 000
- Edité par PierrotLeFou 30 juin 2022 à 1:07:27
Le Tout est souvent plus grand que la somme de ses parties.
parce qu'en général dans les exos C sur les listes chaînées on fait ainsi, on définit un nœud qui contient un lien vers un autre nœud (ou pas)»
CheickDiakité a écrit:
Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO
[...]
Là tu devrais te dire : «tien je vais certainement avoir besoin d'un truc qui représente une liste et j'y accéderai (à travers des fonctions) avec une interface qui ressemble à des accès sur une file. Du coup quelque chose comme :
struct queue {
struct node *head;
struct node *tail;
…
ptêt d'autres trucs dont tu auras besoin
…
};
comme sdd et pour l'API des fonctions comme queue_new, queue_enqueue, queue_dequeue, queue_is_empty, queue_length, … cette liste n'est pas exhaustive et va dépendre des besoins que tu vas rencontrer plus tard.»
CheickDiakité a écrit:
[...] les infos d'une moto sont : marque couleur vitesse prix.
Là tu te dis «ah ben tient, je sais quelles données je vais devoir manipuler et stocker dans ma file, sans doute quelque chose comme :
Il n'est pas mentionné s'il s'agit d'une liste simplement chaînée ou doublement chaînée. Si c'est une liste simplement chaînée, pour rester "efficace", on n'aura pas le choix d'insérer à la fin et de supprimer (ou retirer) au début.
Je me place dans le contexte où on a deux pointeurs comme j'ai mentionné et comme White Crow a illustré.
- Edité par PierrotLeFou 30 juin 2022 à 1:52:57
Le Tout est souvent plus grand que la somme de ses parties.
Il n'est pas mentionné s'il s'agit d'une liste simplement chaînée ou doublement chaînée. [...]
- Edité par PierrotLeFou il y a 26 minutes
Ce n'est pas ça le plus important, enfin àmha.
J'imagine que ce type d'exercice est surtout utile pour comprendre les différences d'API entre une pile (stack →push/pop), une file (queue → enqueue/dequeue) et un deque (Double Ended QUEue → prepend, append/pop, dequeue). Dans ce cadre, un chaînage simple est amplement suffisant.
Hélas, dans la plupart des cours (C pour debutants), c'est dans le mauvais sens. On explique ce qu'est un pointeur, on montre que ça peut servir à chainer, et on donne des tas d'exercices ajouter chercher enlever au debut à la fin à une position après une valeur. Et là, on s'aperçoit que ça se comporte comme des piles, des files, des listes ordonnées ou des séquences indexées.
Mais les fonctionnalités voulues ne sont pas posées au départ, une api bien définie qu'il faudrait ensuite implémenter.
Ca peut s'expliquer
Si on posait l'api au départ, pas sûr que le ďébutant choisirait d'implémenter par des chainage, alors qu'il peut certainement le faire avec des tableaux, qu'il maîtrise mieux (même problème que faire programmer des choses récursivement, après 3 mois à faire des boucles)
À ce niveau d'enseignement, pile/file tout ça, c'est des notions abstraites dont ils n'ont vu aucune instance, aucun besoin dans les travaux qui leur ont été demandés. Pour parler d'un concept abstrait, c'est plus pratique si on voit à quoi le raccrocher concrètement. Ressentir une vraie utilité, ça aide a apprendre.
CheickDiakité : je détaille ton plan de travail. Fais les choses dans l'ordre !
1) Définir les structures. Tu peux en utiliser trois : la liste (comme indiqué par White Crow), la structure moto (idem) et une structure maillon contenant une moto et un pointeur vers le maillon suivant. Ou juste deux en mettant les propriétés de la moto dans la structure maillon.
2) Écrire une fonction qui crée une liste : soit elle crée une liste vide, soit elle crée une liste avec un élément, je ne sais pas ce qui est le mieux (s'il y a un mieux).
3) Écrire une fonction qui insère un élément. Soit au début, et la suppression se fera en fin de chaîne (c'est ce que je ferais a priori), soit à la fin, et la suppression se fera en début de chaîne (proposition de Pierrot). C'est exactement pareil, il faut juste prendre une décision.
4) Quand tu auras inséré plusieurs éléments, écris une fonction qui affiche la liste, même si ce n'est pas demandé : c'est très utile pour déboguer.
5) Écrire une fonction qui supprime un élément de la liste. (Soit à la fin, soit au début, voir plus haut.)
6) Manipuler le programme et afficher la liste à chaque étape pour vérifier que tout se passe comme prévu.
CheickDiakité : je détaille ton plan de travail. Fais les choses dans l'ordre !
Avant tout, revoir sérieusement le cours qui va avec cet exercice, dont on ne peut pas imaginer qu'il te soit tombé du ciel sur la tête, comme ça, par miracle.
Il contient certainement toutes les indications utiles sur la notion de pointeur, de structure, de chaînage, d'allocation dynamique avec quelques exemples.
Après ça, les exercices c'est le moyen d'intégrer tout ça, en faisant des erreurs au passage bien sûr. C'est comme ça qu'on apprend, mais pour ça il faut les faire soi-même.
> Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une moto sont : marque couleur vitesse prix.
et quel est le problème avec cet énoncé ? Un terme que tu ne comprends pas ?
2) Écrire une fonction qui crée une liste : soit elle crée une liste vide, soit elle crée une liste avec un élément, je ne sais pas ce qui est le mieux (s'il y a un mieux).
[...] -
Edité par robun il y a environ 1 heure
Il est toujours intéressant de pouvoir créer une liste vide …
En C, il est nécessaire et même indispensable d'initialiser les variables qui servent à représenter les structures de données utilisées dans les programmes.
Après "créer une liste", qu'est ce que ça veut dire ? La liste est-elle représentée
par une variable de type structure (initialiser les champs !),
par un pointeur vers une structure (allouer la structure et en initialiser les champs !) ?
ou une simple variable qui pointe vers le premier nœud (mettre ce pointeur à NULL)
struct Liste liste1;
struct Liste *liste2;
struct Noeud *liste2;
- Edité par michelbillaud 16 juillet 2022 à 16:34:24
[Exercice] Liste chainée
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.