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] Question C listes chainées

2011nobile
2011nobile
Niveau 10
06 octobre 2013 à 04:19:16

Salut à tous. Voila, j'ai une petite question concernant les listes doublement chaînées en C.

Ma liste est constitué d'éléments contenant une valeur entière, un pointeur sur l'élément précédent et un pointeur sur l'élément suivant.

J'essaye de faire une fonction d'insertion correcte mais je n'y parvient pas. Dans mon main, je crée une liste que j'initialise à NULL. Après ça, dans ma fonction insertion (qui prend en paramètre ma liste, et une valeur), je crée un élément de la liste, je fait l'allocation mémoire et j'ajoute la valeur. Jusqu’à la deuxième valeur tout va bien, j'ai bien mes deux valeurs dans la liste avec les parties "suivante" et "précédente" aux bonnes valeurs:

-Null | val | ptr sur 2eme val -> pour le 1er maillon
-ptr sur 1ere val | val | NULL -> pour le 2eme maillon

Mais j'ai un soucis quand j'essaye d'ajouter une troisième valeur, je n'arrive pas a me déplacer dans ma liste. J'ai essayer de faire un while((*maliste)->!=NULL) pour me positionner sur la dernière val de mon pointeur mais ca tourne en boucle, j'aimerais arriver à l'endroit ou est stocker ma 2ème valeur pour pouvoir donner à mon nouveau maillon la valeur de l'élément précedent.

Voila, ce n'est pas très clair (c'est peut être normal vu l'heure) désolé pour ça et j'espère que vous comprendrez.

Merci à vous.

Silvermo
Silvermo
Niveau 26
06 octobre 2013 à 09:27:51

peux-tu poster ton code ? cela t'éviterait beaucoup de blabla ^^

angivare
angivare
Niveau 10
06 octobre 2013 à 11:46:54

si maliste correspond à un maillon entier c'est normal qu'il sera jamais nul, il faudrait vérifier si le pointeur vers la prochaine valeur est nul :(

2011nobile
2011nobile
Niveau 10
06 octobre 2013 à 14:50:25

Merci pour vos réponses. Je ais essayer de m'exprimer d'une meilleure façon:

En fait, là, par exemple, je sait que j'ai 2 valeurs dans ma liste. Pour en ajouter une troisième, je peut donc remplir le maillon que je veut ajouter à la liste et faire: maliste->suivant->suivant= monnouveaumaillon. Mais si je peut faire ca c'est pare que je sait qu'il n'y a que deux élément dans la liste. Ce que j'aimerais faire en fait c'est me placer directement à l'endroit du dernier élément pour avoir seulement à faire maliste->suivant=monnouveaumaillon.

Merci à vous

Silvermo
Silvermo
Niveau 26
06 octobre 2013 à 14:53:26

La langue française n'est pas le meilleur moyen d'exprimer quelque chose de très formel et encore moins pour exprimer la solution ou la cause du problème logique. Tu devrais montrer ton code, afin que le problème soit ciblé rapidement.

SwordQuardo
SwordQuardo
Niveau 5
06 octobre 2013 à 15:26:33

Alors c'est très simple, tu utilise un curseur.

typedef struct etiListe{
int val;
struct etiListe* prec;
struct etiListe* suiv;
} Liste;

void ajout(Liste *l, int val){
Liste *curseur = l, *new;
while (curseur->suiv != NULL) curseur = curseur->suiv;
//ici, curseur est à la dernière valeur entrée
//On alloue new

//on met val dans new->val

//on met null à new->suiv

//on raccorde curseur->suiv à new

2011nobile
2011nobile
Niveau 10
06 octobre 2013 à 19:39:36

Okkkk merci à toi SwordQuardo ! Je vais tester ça :-)

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