Comment créer une liste liée à la programmation de c

Dans la programmation C, si vous souhaitez ajouter une seconde structure de coder vous avez déjà créé, créer une liste chaînée - une série de structures qui contiennent des pointeurs vers l'autre. En plus des données de base dans une structure, la structure contient un pointeur, qui contient l'adresse de la structure suivante dans la liste.

Avec un peu de jonglerie intelligente de noms de pointeur, plus une valeur NULL pour couronner la fin de la liste, vous pourriez vous retrouver avec quelque chose de similaire au code source dans une liste liée Primitive exemple.

Une primitive-liste chaînée EXEMPLE

#include #include #include int main () {struct stock {symbole de char [5] -int quantité-prix float-struct stock * prochaine -} - struct stock * première struct stock * courant struct stock * nouveau - / * Création d'une structure en mémoire * / first = (struct stock *) malloc (sizeof (struct stock)) - si (première == null) {puts ("Une sorte de malloc () erreur") - sortie (1) -} / * Affecter données de structure */current=first-strcpy(current->symbol,"GOOG")-current->quantity=100-current->price=801.19-current->next=NULL-new=(struct stock *) malloc (sizeof (struct stock)) - si (nouvelle == null) {puts ("Un autre malloc () error")-exit(1)-}current->next=new-current=new-strcpy(current->symbol,"MSFT")-current->quantity=100-current->price=28.77-current->next=NULL-/* Base de données d'affichage * / puts ("Investissement Portfolio")-printf("SymboltSharestPricetValuen")-current=first-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-current=current->next-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-return(0)-}

Ce code source est assez long, mais il crée simplement une seconde structure, reliée à la première. Ne laissez pas la longueur du code source vous intimider.

Lignes 13 à 15 déclarent les pointeurs trois structure standard qui sont nécessaires pour une liste liée danse. Traditionnellement, ils sont nommés d'abord, actuelle et nouvelle. Ils jouent dans le quatrième membre de la structure, à côté, a trouvé à la ligne 11, qui est un pointeur de structure.

Ne pas utiliser typedef pour définir une nouvelle variable de structure lors de la création d'une liste chaînée. A Primitive liste liée exemple ne pas utiliser typedef, il est donc pas un problème avec le code, mais de nombreux programmeurs C utiliser typedef avec les structures. Faites attention!

Le nom de la variable nouvelle, utilisé à la ligne 15, est un mot réservé en C ++, donc si vous voulez être bilingue, changer le nom de la variable à new_struct ou pour autre chose que le mot nouveau.

Lorsque la première structure est rempli, ligne 30 attribue un pointeur NULL à l'élément suivant. Cette valeur NULL coiffe la fin de la liste chaînée.

Ligne 32 crée une structure, en plaçant son adresse à la nouvelle variable de pointeur. L'adresse est enregistrée dans la première structure à la ligne 38. Voilà comment l'emplacement de la deuxième structure est conservée.




Lignes 40 à 43 remplissent information pour le deuxième pointeur, en attribuant une valeur nulle à l'élément suivant à la ligne 43.

La liaison se déroule comme le contenu des structures sont affichés. Ligne 48 saisit l'adresse de la première structure. Puis la ligne 54 saisit l'adresse de la prochaine structure à partir de l'intérieur de la première structure.

Exercice 1: Tapez le code source de A Linked-Liste Primitive Exemple dans votre éditeur. Même si elle est longue, tapez-le dans parce que vous aurez besoin de le modifier plus tard (si vous n'êtes pas habitué à ce que maintenant). Construire et exécuter.

image0.jpg

Contrairement à des tableaux, des structures dans une liste chaînée ne sont pas numérotées. Au lieu de cela, chaque structure est liée à la structure suivante dans la liste. Tant que vous connaissez l'adresse de la première structure, vous pouvez travailler à travers la liste jusqu'à la fin, qui est marquée par un NULL.

Une liste chaînée Primitive exemple montre peu de code source bâclée avec beaucoup de code répété. Quand vous voyez plusieurs déclarations de ce genre dans votre code, vous devriez immédiatement penser “ fonctions ”.

A MIEUX-liste chaînée EXEMPLE

#include #include #include #define ARTICLES 5struct stock {symbole de char [5] -int quantité-prix float-struct stock * prochaine -} - struct stock * première struct stock * courant struct stock * nouveau-struct stock * make_structure (void) de fill_structure -void (struct de stock * a, int c) show_structure -void (struct stock * a) -INT main () {int x-pour (x = 0-xnext = new-courant = nouveau-} fill_structure ( actuelle, x + 1) -} current-> next = NULL - / * Base de données d'affichage * / puts ("portefeuille d'investissement") - printf ("Symbole tShares tPrice Tvalue n") - courant = premier temps ( actuelle) {show_structure (actuelle) -current = current-> Next-} return (0) -} struct stock * make_structure (void) {struct stock * aa = (struct stock *) malloc (sizeof (struct stock)) - si (NULL ==) {puts ("Une sorte de malloc () Erreur") - sortie (1) -} return (a) -} fill_structure void (struct stock * a, int c) {printf ("Article #% d /% d: n ", c, ARTICLES) -printf (" Symbole boursier: ") -scanf ("% s ", a-> symbole) -printf (" Nombre d'actions: ") -scanf ("% D ", a-> quantité) -printf (" l'action: ") -scanf ("% f ", a-> prix) -} show_structure void (struct de stock * a) {printf ("% - 6s t% 5d ​​n ", a-> symbole, a-> quantité, a-> prix, a-> quantité t% .2f t% .2f * a-> prix) -}

La plupart des listes liées sont créés comme indiqué dans une meilleure liste liée exemple. La clé est d'utiliser trois variables de structure, représentée en lignes 13 à 15:

  • premier contient toujours l'adresse de la première structure dans la liste. Toujours.

  • actuelle contient l'adresse de la structure en cours d'élaboration, rempli de données, ou affichée.

  • nouvelle est l'adresse d'une nouvelle structure créée à l'aide de la fonction malloc ().

Ligne 7 déclare la structure du stock de manière globale. De cette façon, il peut être accessible à partir des différentes fonctions.

La boucle entre les lignes 25 et 39 crée de nouvelles structures, de les relier ensemble. La structure initiale est spécial, de sorte que son adresse est enregistrée dans la ligne 30. Sinon, une nouvelle structure est alloué, grâce à la fonction de make_structure ().

Dans la ligne 35, la structure précédente est updated- la valeur du courant ne change pas tant Ligne 36. Avant que cela arrive, le pointeur dans la structure actuelle est mise à jour avec l'adresse de la structure suivante, nouvelle.

À la ligne 40, à la fin de la liste liée est marquée par la réinitialisation du nouveau pointeur dans la dernière structure à une valeur NULL.

La boucle while à la ligne 46 affiche toutes les structures de la liste chaînée. L'état de la boucle est la valeur du pointeur courant. Lorsque la valeur NULL est rencontré, la boucle arrête.

Le reste du code indiqué dans une meilleure Linked-Liste Exemple compose de fonctions qui sont assez explicites.

Exercice 2: Copiez le code de A Linked-Liste meilleur exemple dans l'éditeur. Construire et exécuter.

Prenez note des déclarations scanf () dans la fonction de fill_structure (). Rappelez-vous que le -> est le “ Peeker ” notation pour un pointeur. Pour obtenir l'adresse, vous devez faire précéder la variable avec un dans la fonction scanf ().


» » » » Comment créer une liste liée à la programmation de c