Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Ajout d'Éléments | Implémentation des Structures de Données
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Maîtriser les Structs en C

bookAjout d'Éléments

Pour rendre votre liste chaînée simple utile, il est nécessaire d’y ajouter des nœuds. Vous allez implémenter la logique permettant d’insérer des nœuds dans la liste. Vous allez créer de nouveaux nœuds, les connecter et les intégrer afin que la liste puisse croître dynamiquement à mesure que vous ajoutez des éléments.

Cette approche pratique permet de comprendre précisément ce qui se passe en arrière-plan.

Implémentation de l’insertion de nœud

Écrivons une fonction simple pour créer un nœud. Cette fonction doit :

  • Prendre en argument un nombre de type int, qui sera stocké dans le champ data du nœud ;
  • Créer un pointeur vers une zone de mémoire allouée dynamiquement (en tenant compte de la taille du nœud) ;
  • Vérifier le succès de l’allocation mémoire pour le nœud ;
  • Placer la valeur requise (argument de la fonction) dans le champ data ;
  • Le pointeur next doit être NULL, puisque la fonction crée un seul nœud ;
  • La fonction doit retourner un pointeur vers la zone mémoire où la valeur est stockée.

La fonction AddNewNode() prend un pointeur vers un pointeur, car elle peut modifier la valeur du pointeur vers le premier nœud (head) de la liste, ainsi que la valeur qui sera stockée dans le nouveau nœud :

void AddNewNode(struct Node** head, int value) 
{
	...
}

Si la liste est vide (*head == NULL), il suffit de mettre à jour le pointeur vers la tête de la liste (*head) pour qu’il pointe vers le nouveau nœud (newNode), auquel cas newNode deviendra le premier nœud (nœud tête). Dans le cas d’une liste non vide, une boucle est utilisée pour rechercher le dernier nœud.

Le nœud courant joue le rôle de nœud tampon ; il permet d’itérer dans la liste et de trouver un nœud qui ne pointe vers rien (*next == NULL).

struct Node* current = *head;

while (current->next != NULL) 
{
    ...
}

En fin de compte, il est nécessaire de faire du nouveau nœud newNode le dernier nœud, ce qui signifie que current->next doit être égal à newNode. Ainsi, newNode devient le dernier nœud de la liste.

Comme exercice, il est demandé de concevoir et d'ajouter une fonction permettant d'ajouter de nouveaux nœuds aux nœuds existants.

Tâche

Swipe to start coding

Créer une fonction addNewNode qui ajoute un nouveau nœud à la fin d'une liste chaînée simple.

Dans la fonction :

  1. Déclarer une variable struct Node* newNode et créer un nouveau nœud en utilisant createNode(value).
  2. Vérifier si la liste est vide en testant *head == NULL.
  3. Si la liste est vide, affecter newNode à *head.
  4. Si la liste n'est pas vide, déclarer struct Node* current et l'affecter à *head.
  5. Parcourir la liste à l'aide d'une boucle while jusqu'à ce que current->next soit NULL.
  6. Après avoir atteint le dernier nœud, définir current->next = newNode.

Solution

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 3
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you show me an example of how to use the AddNewNode function?

What should the Node struct look like for this implementation?

Can you explain how memory management works when adding new nodes?

close

bookAjout d'Éléments

Glissez pour afficher le menu

Pour rendre votre liste chaînée simple utile, il est nécessaire d’y ajouter des nœuds. Vous allez implémenter la logique permettant d’insérer des nœuds dans la liste. Vous allez créer de nouveaux nœuds, les connecter et les intégrer afin que la liste puisse croître dynamiquement à mesure que vous ajoutez des éléments.

Cette approche pratique permet de comprendre précisément ce qui se passe en arrière-plan.

Implémentation de l’insertion de nœud

Écrivons une fonction simple pour créer un nœud. Cette fonction doit :

  • Prendre en argument un nombre de type int, qui sera stocké dans le champ data du nœud ;
  • Créer un pointeur vers une zone de mémoire allouée dynamiquement (en tenant compte de la taille du nœud) ;
  • Vérifier le succès de l’allocation mémoire pour le nœud ;
  • Placer la valeur requise (argument de la fonction) dans le champ data ;
  • Le pointeur next doit être NULL, puisque la fonction crée un seul nœud ;
  • La fonction doit retourner un pointeur vers la zone mémoire où la valeur est stockée.

La fonction AddNewNode() prend un pointeur vers un pointeur, car elle peut modifier la valeur du pointeur vers le premier nœud (head) de la liste, ainsi que la valeur qui sera stockée dans le nouveau nœud :

void AddNewNode(struct Node** head, int value) 
{
	...
}

Si la liste est vide (*head == NULL), il suffit de mettre à jour le pointeur vers la tête de la liste (*head) pour qu’il pointe vers le nouveau nœud (newNode), auquel cas newNode deviendra le premier nœud (nœud tête). Dans le cas d’une liste non vide, une boucle est utilisée pour rechercher le dernier nœud.

Le nœud courant joue le rôle de nœud tampon ; il permet d’itérer dans la liste et de trouver un nœud qui ne pointe vers rien (*next == NULL).

struct Node* current = *head;

while (current->next != NULL) 
{
    ...
}

En fin de compte, il est nécessaire de faire du nouveau nœud newNode le dernier nœud, ce qui signifie que current->next doit être égal à newNode. Ainsi, newNode devient le dernier nœud de la liste.

Comme exercice, il est demandé de concevoir et d'ajouter une fonction permettant d'ajouter de nouveaux nœuds aux nœuds existants.

Tâche

Swipe to start coding

Créer une fonction addNewNode qui ajoute un nouveau nœud à la fin d'une liste chaînée simple.

Dans la fonction :

  1. Déclarer une variable struct Node* newNode et créer un nouveau nœud en utilisant createNode(value).
  2. Vérifier si la liste est vide en testant *head == NULL.
  3. Si la liste est vide, affecter newNode à *head.
  4. Si la liste n'est pas vide, déclarer struct Node* current et l'affecter à *head.
  5. Parcourir la liste à l'aide d'une boucle while jusqu'à ce que current->next soit NULL.
  6. Après avoir atteint le dernier nœud, définir current->next = newNode.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 3
single

single

some-alt