Chers étudiants,
Bienvenue dans ce projet fondamental qui vous initiera aux structures de données. Les listes chaînées sont le premier pas vers la maîtrise de l'organisation dynamique des données en mémoire.
"Le code est de la poésie pour machines, mais la structure est la grammaire qui lui donne son sens."
Que chaque fonction que vous implémenterez soit l'occasion de perfectionner votre art du développement. Ce projet est conçu pour vous faire réfléchir, pas seulement coder.
- NE PAS modifier les fichiers de test existants
- NE PAS modifier les fichiers d'en-tête (.h)
- NE PAS utiliser de Makefile
- NE PAS utiliser DIA ou autres outils graphiques
- Votre travail se limite aux fichiers :
List/src/List/ListS.cppList/src/List/ListD.cpp
Repository public nommé liste avec cette structure exacte :
List/
├── List/
│ ├── src/
│ │ └── List/
│ │ ├── ListS.h
│ │ ├── ListS.cpp # VOTRE CODE
│ │ ├── ListD.h
│ │ └── ListD.cpp # VOTRE CODE
│ └── App/
│ ├── TestListS/
│ │ ├── Entry.cpp
│ │ └── TestListS.cpp
│ └── TestListD/
│ ├── Entry.cpp
│ └── TestListD.cpp
└── Unitest/
└── src/
└── Unitest/
# Framework de tests (NE PAS TOUCHER)
# Compiler Unitest (une seule commande)
clang++ -c Unitest/src/Unitest/TestCase.cpp Unitest/src/Unitest/TestRunner.cpp Unitest/src/Unitest/ConsoleReporter.cpp -IUnitest/src -ICommons/src -std=c++20; ar rcs libUnitest.a TestCase.o TestRunner.o ConsoleReporter.o# Compiler votre code ListS.cpp et ListD.cpp
clang++ -c List/src/List/ListS.cpp List/src/List/ListD.cpp -IList/src -ICommons/src -std=c++20; ar rcs libList.a ListS.o ListD.o# Compiler et tester la liste simplement chaînée
clang++ App/TestListS/Entry.cpp App/TestListS/TestListS.cpp -IList/src -IUnitest/src -ICommons/src -L. -lList -lUnitest -std=c++20 -o TestListS.exe
./TestListS.exe
# Compiler et tester la liste doublement chaînée
clang++ App/TestListD/Entry.cpp App/TestListD/TestListD.cpp -IList/src -IUnitest/src -ICommons/src -L. -lList -lUnitest -std=c++20 -o TestListD.exe
./TestListD.exeCréez compiler.ps1 pour PowerShell :
Write-Host "🔨 Compilation du projet Listes Chaînées..." -ForegroundColor Cyan
# Étape 1 : Framework de tests
Write-Host "1. Compilation du framework de tests..." -ForegroundColor Yellow
clang++ -c Unitest/src/Unitest/TestCase.cpp Unitest/src/Unitest/TestRunner.cpp Unitest/src/Unitest/ConsoleReporter.cpp -IUnitest/src -ICommons/src -std=c++20
ar rcs libUnitest.a TestCase.o TestRunner.o ConsoleReporter.o
Remove-Item *.o -ErrorAction SilentlyContinue
# Étape 2 : Votre implémentation
Write-Host "2. Compilation de votre implémentation..." -ForegroundColor Yellow
clang++ -c List/src/List/ListS.cpp List/src/List/ListD.cpp -IList/src -ICommons/src -std=c++20
ar rcs libList.a ListS.o ListD.o
Remove-Item *.o -ErrorAction SilentlyContinue
# Étape 3 : Exécutables de test
Write-Host "3. Compilation des exécutables de test..." -ForegroundColor Yellow
clang++ App/TestListS/Entry.cpp App/TestListS/TestListS.cpp -IList/src -IUnitest/src -ICommons/src -L. -lList -lUnitest -std=c++20 -o TestListS.exe
clang++ App/TestListD/Entry.cpp App/TestListD/TestListD.cpp -IList/src -IUnitest/src -ICommons/src -L. -lList -lUnitest -std=c++20 -o TestListD.exe
Write-Host "✅ Compilation terminée !" -ForegroundColor Green
Write-Host "📋 Exécution des tests :" -ForegroundColor Cyan
Write-Host " .\TestListS.exe # Liste simplement chaînée"
Write-Host " .\TestListD.exe # Liste doublement chaînée"Si votre implémentation est correcte, vous devriez voir :
./TestListD.exe
Testing Nken Compiler Components...
============================================================
🧪 Nken Test Suite
============================================================
[PASS] TestCreerNoeudDouble (2ms | ✓3 | 100.0%)
[PASS] TestInitialiserDouble (1ms | ✓4 | 100.0%)
...
🎉 All tests passed! 15/15 tests succeeded. (100.0%)Pour ListS.cpp :
NoeudS* CreerNoeudS(int valeur) {
// À implémenter - retourne nullptr pour l'instant
return nullptr;
}
void Initialiser(ListeSimple* liste) {
// À implémenter
}
bool EstVide(const ListeSimple* liste) {
// À implémenter
return true;
}Pour ListD.cpp :
NoeudD* CreerNoeudD(int valeur) {
// À implémenter - retourne nullptr pour l'instant
return nullptr;
}
void Initialiser(ListeDouble* liste) {
// À implémenter
}
bool EstVide(const ListeDouble* liste) {
// À implémenter
return true;
}Si vous avez un Segmentation fault :
- Vérifiez que
CreerNoeudretourne un vrai pointeur (pasnullptr) - Implémentez d'abord les fonctions basiques
- Testez après chaque fonction implémentée
# Recompilation rapide après modifications
clang++ -c List/src/List/ListS.cpp List/src/List/ListD.cpp -IList/src -std=c++20; ar rcs libList.a ListS.o ListD.o
clang++ App/TestListS/Entry.cpp App/TestListS/TestListS.cpp -IList/src -IUnitest/src -L. -lList -lUnitest -std=c++20 -o TestListS.exe
./TestListS.exe- Compiler sans erreurs avec les commandes directes
- Exécuter les deux tests :
TestListS.exeetTestListD.exe - Vérifier que tous les tests passent (✅ verts)
- Pousser sur le repository
liste
- ✅ Tous les tests passent
- ✅ Pas de segmentation fault
- ✅ Gestion correcte de la mémoire
- ✅ Code clair et organisé
- ✅ Respect de l'architecture
"La programmation n'est pas seulement de dire à un ordinateur ce qu'il doit faire, c'est aussi de comprendre pourquoi il le fait. Les listes chaînées sont votre premier pas vers cette compréhension profonde."
Votre mission : transformer ces structures abstraites en réalités fonctionnelles. Montrez-nous la précision de votre raisonnement et l'élégance de vos solutions.
Votre enseignant en Structures de Données