Skip to content

RihenUniverse/List

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 Projet d'Implémentation de Listes Chaînées

👨‍🏫 Message de Bienvenue

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.

📋 Consignes Strictes

⚠️ Règles Immuables

  1. NE PAS modifier les fichiers de test existants
  2. NE PAS modifier les fichiers d'en-tête (.h)
  3. NE PAS utiliser de Makefile
  4. NE PAS utiliser DIA ou autres outils graphiques
  5. Votre travail se limite aux fichiers :
    • List/src/List/ListS.cpp
    • List/src/List/ListD.cpp

📁 Structure GitHub Requise

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)

🚀 Compilation et Exécution - Commandes Directes

Étape 1 : Compiler le Framework de Tests

# 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

Étape 2 : Compiler Votre Implémentation des Listes

# 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

Étape 3 : Compiler et Exécuter les Tests

# 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.exe

📝 Script de Compilation Complet (Optionnel)

Cré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"

🧪 Résultat Attendu

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%)

💡 Ordre d'Implémentation Recommandé

Commencez par ces fonctions essentielles :

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;
}

🐛 Débogage Rapide

Si vous avez un Segmentation fault :

  1. Vérifiez que CreerNoeud retourne un vrai pointeur (pas nullptr)
  2. Implémentez d'abord les fonctions basiques
  3. 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

📚 Validation Finale

Avant de soumettre sur GitHub :

  1. Compiler sans erreurs avec les commandes directes
  2. Exécuter les deux tests : TestListS.exe et TestListD.exe
  3. Vérifier que tous les tests passent (✅ verts)
  4. Pousser sur le repository liste

Critères d'évaluation :

  • ✅ Tous les tests passent
  • ✅ Pas de segmentation fault
  • ✅ Gestion correcte de la mémoire
  • ✅ Code clair et organisé
  • ✅ Respect de l'architecture

🎓 Citation de Clôture

"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

About

Algorithme de liste chaine en cpp

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages