Vidéo: Langage C #19 - listes 2024
Dans la programmation C, si vous voulez ajouter une deuxième structure au code que vous avez déjà créé, créez une liste chaînée - une série de structures qui contiennent des pointeurs les uns aux autres. Avec les données de base dans une structure, la structure contient un pointeur, qui contient l'adresse de la structure suivante dans la liste.
Avec une jonglerie astucieuse de noms de pointeurs, plus une valeur NULL pour plafonner la fin de la liste, vous pourriez vous retrouver avec quelque chose de similaire au code source dans Un exemple de liste chaînée primitive.
EXEMPLE DE LIAISON PRIMITIVE
#include #include #include int main () {struct stock {char symbol [5]; quantité int; prix flottant; struct stock * suivant;}; struct stock * d'abord; struct stock * courant; struct stock * nouveau; / * Crée une structure en mémoire * / first = (structure stock *) malloc (tailleof (struct stock)); if (first == NULL) {puts ("Une sorte d'erreur malloc ()"); exit (1);} / * Attribue des données de structure * / current = first; strcpy (symbole courant->, "GOOG"); courant-> quantité = 100; current-> prix = 801. 19; current-> next = NULL; nouveau = (struct stock *) malloc (sizeof (struct stock)); if (new == NULL) {puts ("Une autre erreur malloc ()"); exit (1);} current-> next = nouveau; courant = nouveau; strcpy (symbole courant-> "MSFT"); courant-> quantité = 100; courant-> prix = 28. 77; current-> next = NULL; / * Afficher la base de données * / puts ("portefeuille de placement"); printf ("SymboltSharestPricetValuen"); courant = premier; printf ("% - 6st% 5dt%. 2ft%. 2fn", courant-> symbole, courant-> quantité, courant-> prix, courant-> quantité * courant-> prix); courant = courant-> suivant; printf ("% - 6st% 5dt%. 2ft%. 2fn", courant-> symbole, courant-> quantité, courant-> prix, courant-> quantité * courant-> prix); return (0);}
Ce code source est assez long, mais il crée simplement une seconde structure, liée au premier. Ne laissez pas la longueur du code source vous intimider.
Les lignes 13 à 15 déclarent les trois pointeurs de structure standard requis pour une danse en liste chaînée. Traditionnellement, ils sont nommés en premier, actuel et nouveau. Ils jouent dans le quatrième membre de la structure, ensuite, trouvé à la ligne 11, qui est un pointeur de structure.
N'utilisez pas typedef pour définir une nouvelle variable de structure lors de la création d'une liste liée. Un exemple de liste liée primitive n'utilise pas typedef, donc ce n'est pas un problème avec le code, mais de nombreux programmeurs C utilisent typedef avec des structures. Faites attention!
Le nom de la variable new, utilisé à la ligne 15, est un mot réservé en C ++, donc si vous voulez être bilingue, changez le nom de la variable en new_struct ou autre chose que le mot new.
Lorsque la première structure est remplie, la ligne 30 attribue un pointeur NULL à l'élément suivant.Cette valeur NULL limite la fin de la liste liée.
La ligne 32 crée une structure en plaçant son adresse dans la nouvelle variable de pointeur. L'adresse est sauvegardée dans la première structure de la ligne 38. C'est ainsi que l'emplacement de la seconde structure est conservé.
Les lignes 40 à 43 remplissent les informations du second pointeur, en affectant une valeur NULL à l'élément suivant à la ligne 43.
La liaison a lieu lorsque le contenu des structures est affiché. La ligne 48 capture l'adresse de la première structure. Ensuite, la ligne 54 capture l'adresse de la structure suivante à partir de la première structure.
Exercice 1 : Tapez le code source de A Primitive Linked-List Example dans votre éditeur. Même si c'est long, tapez-le, car vous devrez le modifier plus tard (si vous n'êtes pas habitué à cela maintenant). Construire et courir.
Contrairement aux tableaux, les structures d'une liste liée ne sont pas numérotées. Au lieu de cela, chaque structure est liée à la structure suivante de la liste. Tant que vous connaissez l'adresse de la première structure, vous pouvez parcourir la liste jusqu'à la fin, qui est marquée par une valeur NULL.
Un exemple de liste de liens primitifs montre un code source mal fait avec beaucoup de code répété. Lorsque vous voyez plusieurs instructions comme celle-ci dans votre code, vous devriez immédiatement penser à "fonctions". "
UN EXEMPLE DE LIAISON MEILLEURE
#include #include #include #define ITEMS 5 struct stock {char symbol [5]; quantité int; prix flottant; struct stock * suivant;}; struct stock * d'abord; struct stock * courant; struct stock * nouveau; struct stock * make_structure (vide); void fill_structure (struct stock * a, int c); void show_structure (struct stock * a); int main () {int x; pour (x = 0; xnext = nouveau; current = new;} fill_structure (current, x + 1);} current-> next = NULL; / * Afficher la base de données * / puts ("Investment Portfolio"); printf ("SymboltSharestPricetValuen "); current = first; while (courant) {show_structure (courant); current = current-> next;} retour (0); struct struct * make_structure (vide) {struct stock * a; a = (struct stock *) malloc (sizeof (struct stock)); if (a == NULL) {puts ("Une sorte d'erreur malloc ()"); exit (1);} return (a);} void fill_structure (struct stock * a, int c) {printf ("Elément #% d /% d: n", c, ITEMS); printf ("Symbole de stock:"); scanf ("% s", a-> symbole); printf ("Nombre des partages: "); scanf ("% d ", & a-> quantité); printf (" Prix de l'action: "); scanf ("% f ", & a-> prix);} void show_structure (struct stock * a) {printf ("% - 6st% 5dt%. 2ft%. 2fn", a-> symbole, a-> quantité, a-> prix, a-> quantité * a-> prix);}
Listes les plus proches sont créés comme indiqué dans Un meilleur exemple de liste liée.La clé consiste à utiliser trois variables de structure, illustrées dans les lignes 13 à 15:
-
contient toujours l'adresse de la première structure de la liste. Toujours.
-
current contient l'adresse de la structure en cours de traitement, remplie de données ou affichée.
-
new est l'adresse d'une nouvelle structure créée en utilisant la fonction malloc ().
La ligne 7 déclare la structure de stock comme globale. De cette façon, il peut être consulté à partir des différentes fonctions.
La boucle for entre les lignes 25 et 39 crée de nouvelles structures, les reliant entre elles.La structure initiale est spéciale, donc son adresse est enregistrée dans la ligne 30. Sinon, une nouvelle structure est allouée, grâce à la fonction make_structure ().
À la ligne 35, la structure précédente est mise à jour; la valeur du courant n'est pas changée jusqu'à la ligne 36. Avant cela, le pointeur de la structure actuelle est mis à jour avec l'adresse de la structure suivante, nouvelle.
Sur la ligne 40, la fin de la liste chaînée est marquée en réinitialisant le nouveau pointeur de la dernière structure à une valeur NULL.
La boucle while de la ligne 46 affiche toutes les structures de la liste chaînée. La condition de la boucle est la valeur du pointeur actuel. Lorsque la valeur NULL est rencontrée, la boucle s'arrête.
Le reste du code affiché dans Un meilleur exemple de liste chaînée se compose de fonctions qui s'expliquent d'elles-mêmes.
Exercice 2 : Copiez le code d'un meilleur exemple de liste liée dans l'éditeur. Construire et courir.
Prenez note des instructions scanf () dans la fonction fill_structure (). Rappelez-vous que le symbole -> est la notation "peeker" pour un pointeur. Pour obtenir l'adresse, vous devez préfixer la variable avec un & dans la fonction scanf ().