Liste simplement chaînée
Chaque nœud contient une valeur et un lien vers le suivant.
Qu’est-ce que Liste simplement chaînée ?
Chaque nœud contient une valeur et un lien vers le suivant.
Construisez, parcourez et détruisez une liste chaînée.
Points importants
- Définissez les invariants avant les opérations.
- Gérez les cas vide, plein et échec d’allocation.
- Étudiez ensemble complexité et ownership.
Exemples de code C et C++
main.c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node *next;
} Node;
int main(void) {
Node *head = NULL;
for (int value = 3; value >= 1; --value) {
Node *node = malloc(sizeof *node);
if (!node) return 1;
*node = (Node){value, head};
head = node;
}
while (head) {
Node *next = head->next;
printf("%d ", head->value);
free(head);
head = next;
}
puts("");
return 0;
}
1 2 3
C++
main.cpp
#include <iostream>
#include <memory>
struct Node {
int value;
std::unique_ptr<Node> next;
};
int main() {
std::unique_ptr<Node> head;
for (int value = 3; value >= 1; --value) {
head = std::make_unique<Node>(Node{value, std::move(head)});
}
for (Node *node = head.get(); node; node = node->next.get()) {
std::cout << node->value << ' ';
}
std::cout << '\n';
}
1 2 3
Comparaison entre C et C++
C alloue avec malloc et libère chaque nœud. unique_ptr en C++ détruit automatiquement toute la chaîne depuis la tête.
C
Structures et opérations sont séparées, avec allocation explicite.
C++
Classes et conteneurs protègent les invariants et les ressources.
Exercices pratiques
Exécutez les deux versions puis modifiez-les pour observer leurs garanties.
- Testez les états vide et plein.
- Implémentez le nettoyage et cherchez les fuites.
- Comparez à un conteneur standard.