Revision sheet: Listes, piles, files et arbres

Plan du Cours

  1. Pointeurs et allocation dynamique
  2. Recherche, tri et récursivité
  3. Structures et gestion des fichiers
  4. Listes simplement chaßnées
  5. Listes doublement chaßnées
  6. Piles et files
  7. Applications des piles
  8. Arbres binaires
  9. Mesures rĂ©cursives d’un arbre
  10. Parcours d’un arbre binaire
  11. CrĂ©ation et insertion d’élĂ©ments
  12. Recherche et suppression d’un arbre

1. Pointeurs et allocation dynamique

Notions clés & Définitions

  • Adressage direct : L’adressage direct permet d’accĂ©der au contenu d’une variable par le nom de cette variable.
  • Pointeur : Une variable spĂ©ciale qui contient l’adresse d’une autre variable et qui est limitĂ© Ă  un type de donnĂ©es.
  • Allocation dynamique : L’allocation dynamique rĂ©serve la mĂ©moire pendant l’exĂ©cution du programme lorsque le nombre ou la taille des donnĂ©es n’est pas prĂ©visible Ă  la compilation.

Points essentiels

★ À maütriser

📌 En C, l’opĂ©rateur & rĂ©cupĂšre l’adresse d’une variable et l’opĂ©rateur unaire * permet d’accĂ©der au contenu de la variable pointĂ©e.

📌 La fonction malloc rĂ©serve un bloc de la taille demandĂ©e en octets et renvoie son adresse, ou NULL si la mĂ©moire disponible est insuffisante.

📌 AprĂšs une allocation dynamique, il faut tester le pointeur retournĂ© contre NULL, puis libĂ©rer la mĂ©moire obtenue avec malloc, calloc ou realloc Ă  l’aide de free lorsqu’elle n’est plus utilisĂ©e.

Compléments

📌 La fonction calloc alloue la mĂ©moire pour un nombre donnĂ© d’élĂ©ments et initialise cette zone Ă  zĂ©ro, tandis que realloc rĂ©duit ou augmente la taille d’un bloc existant.

Astuce mémo

Adresse → pointeur → contenu

2. Recherche, tri et récursivité

Notions clés & Définitions

  • RĂ©cursivitĂ© : La rĂ©cursivitĂ© est le mĂ©canisme par lequel une fonction s’appelle elle-mĂȘme.

Points essentiels

★ À maütriser

🔄 Processus — La recherche sĂ©quentielle compare successivement chaque Ă©lĂ©ment du tableau avec l’objet recherchĂ© et s’arrĂȘte lorsque l’objet est trouvĂ© ou que tous les Ă©lĂ©ments ont Ă©tĂ© examinĂ©s.

🔄 Processus — La recherche dichotomique dĂ©coupe Ă  chaque Ă©tape une collection triĂ©e autour d’un indice mĂ©dian et poursuit la recherche dans la moitiĂ© infĂ©rieure ou supĂ©rieure selon la comparaison.

🔄 Processus — Le tri par sĂ©lection recherche le plus petit Ă©lĂ©ment de la partie non triĂ©e et le permute avec le premier Ă©lĂ©ment de cette partie.

🔄 Processus — Le tri Ă  bulles compare des cases contiguĂ«s et fait remonter les plus petits Ă©lĂ©ments vers le dĂ©but en rĂ©pĂ©tant les passages dans le tableau.

🔄 Processus — Le calcul rĂ©cursif de la factorielle utilise le cas de base 0! = 1 et la relation n! = n × (n−1)! pour les autres valeurs de n.

⚡ La recherche repose sur une relation d’équivalence telle que l’égalitĂ©, tandis que le tri repose sur une relation d’ordre total telle que l’infĂ©rioritĂ© ou l’égalitĂ©.

Compléments

🧼 Formule — Le tri par sĂ©lection et le tri Ă  bulles prĂ©sentĂ©s ont une complexitĂ© en temps de l’ordre de O(nÂČ) dans le cas Ă©tudiĂ©.

Astuce mémo

Chercher, ordonner, s’appeler

3. Structures et gestion des fichiers

Notions clés & Définitions

  • Fichier : Un ensemble de donnĂ©es stockĂ©es sur une mĂ©moire de masse persistante, utilisĂ©e pour sauvegarder ou lire des informations.

Points essentiels

★ À maütriser

🔄 Processus — La manipulation d’un fichier suit l’ordre gĂ©nĂ©ral ouverture, lecture ou Ă©criture, puis fermeture.

📌 La fonction fopen associe un fichier physique Ă  un descripteur FILE* et renvoie NULL si l’ouverture Ă©choue.

📌 La fonction fread lit des Ă©lĂ©ments binaires dans un tampon et la fonction fwrite Ă©crit des Ă©lĂ©ments binaires depuis un tampon, en utilisant leur taille et leur nombre.

⚡ Un fichier texte est une suite de caractĂšres Ă  accĂšs sĂ©quentiel, tandis qu’un fichier binaire est organisĂ© en enregistrements et permet notamment l’accĂšs direct.

Compléments

📌 La fonction fseek dĂ©place le descripteur d’un nombre d’octets calculĂ© depuis SEEK_SET, SEEK_CUR ou SEEK_END, et renvoie zĂ©ro en cas de rĂ©ussite.

  • Les modes d’ouverture principaux sont r pour la lecture, w pour l’écriture avec remplacement, a pour l’ajout, r+ pour la lecture-Ă©criture sur un fichier existant, w+ pour la lecture-Ă©criture avec remplacement et a+ pour la lecture-Ă©criture en ajout.

Astuce mémo

Ouvrir → traiter → fermer

4. Listes simplement chaßnées

Notions clés & Définitions

  • Liste simplement chaĂźnĂ©e : PossĂšde une tĂȘte, une queue et des maillons contenant chacun une information et un pointeur vers le maillon suivant.
  • Liste simplement chaĂźnĂ©e : Une structure composĂ©e d’élĂ©ments reliĂ©s par un pointeur suivant, chaque Ă©lĂ©ment pointant vers le suivant et le dernier pointant vers NULL.

Points essentiels

★ À maütriser

🔄 Processus — L’initialisation d’une liste consiste Ă  affecter NULL Ă  debut et fin et zĂ©ro Ă  taille avant toute autre opĂ©ration.

🔄 Processus — L’insertion d’un maillon consiste Ă  dĂ©clarer ou crĂ©er l’élĂ©ment, allouer sa mĂ©moire, remplir ses donnĂ©es, mettre Ă  jour les pointeurs nĂ©cessaires et incrĂ©menter la taille de la liste.

🔄 Processus — L’initialisation d’une liste simplement chaĂźnĂ©e met les pointeurs debut et fin Ă  NULL et la taille Ă  zĂ©ro avant toute autre opĂ©ration.

🔄 Processus — Pour insĂ©rer en tĂȘte, on crĂ©e un maillon, on lui affecte la donnĂ©e, on fait pointer son champ suivant vers debut, on actualise debut et, si la liste Ă©tait vide, fin, puis on incrĂ©mente la taille.

🔄 Processus — La suppression en tĂȘte sauvegarde le premier maillon, avance debut vers son successeur, dĂ©crĂ©mente la taille, met fin Ă  NULL si la liste devient vide, rĂ©cupĂšre la donnĂ©e puis libĂšre le maillon.

  • Les maillons d’une liste chaĂźnĂ©e sont allouĂ©s dynamiquement et peuvent ĂȘtre dispersĂ©s en mĂ©moire, contrairement aux Ă©lĂ©ments contigus d’un tableau.

⚡ Les tableaux offrent un accĂšs direct au iᔉ Ă©lĂ©ment sans dĂ©pendre de i, tandis que les listes chaĂźnĂ©es nĂ©cessitent un parcours sĂ©quentiel depuis la tĂȘte et utilisent un espace supplĂ©mentaire pour les pointeurs.

  • Une structure de liste contient gĂ©nĂ©ralement un pointeur debut vers le premier maillon, un pointeur fin vers le dernier maillon et un champ taille indiquant le nombre d’élĂ©ments.

Compléments

🔄 Processus — L’insertion aprĂšs une position donnĂ©e est refusĂ©e si la position est infĂ©rieure Ă  1 ou supĂ©rieure ou Ă©gale Ă  la taille, et sinon le nouveau maillon est reliĂ© entre l’élĂ©ment courant et son successeur avant l’incrĂ©mentation de la taille.

🔄 Processus — L’affichage parcourt les maillons de debut jusqu’à NULL, tandis que la destruction supprime successivement les maillons en tĂȘte jusqu’à obtenir une taille nulle, puis libĂšre la structure de liste.

Astuce mémo

TĂȘte → maillon → queue

5. Listes doublement chaßnées

Notions clés & Définitions

  • Liste doublement chaĂźnĂ©e : Une liste dont chaque maillon pointe Ă  la fois vers son successeur et vers son prĂ©dĂ©cesseur.

Points essentiels

★ À maütriser

🔄 Processus — Lors d’une insertion dans une liste doublement chaĂźnĂ©e, les pointeurs suivant et precedent du nouveau maillon ainsi que les pointeurs des maillons voisins sont actualisĂ©s, avec une mise Ă  jour de debut ou fin si nĂ©cessaire.

🔄 Processus — La suppression par position traite le premier Ă©lĂ©ment, le dernier ou un Ă©lĂ©ment intermĂ©diaire en reliant ses voisins, en rĂ©cupĂ©rant sa donnĂ©e, en libĂ©rant sa mĂ©moire et en dĂ©crĂ©mentant taille.

  • Une liste doublement chaĂźnĂ©e contient les pointeurs debut et fin ainsi qu’un champ taille, tandis que chaque maillon contient une donnĂ©e, un pointeur suivant et un pointeur precedent.

Compléments

🔄 Processus — L’initialisation d’une liste doublement chaĂźnĂ©e affecte NULL Ă  debut et fin et zĂ©ro Ă  taille aprĂšs l’allocation de la structure.

⚡ Une liste doublement chaĂźnĂ©e permet un affichage direct de debut vers fin et un affichage inverse de fin vers debut grĂące Ă  ses deux pointeurs de liaison.

Astuce mémo

Suivant et précédent

6. Piles et files

Notions clés & Définitions

  • Pile : Une structure linĂ©aire dynamique de type LIFO, dans laquelle le dernier Ă©lĂ©ment insĂ©rĂ© est le premier extrait et seul l’élĂ©ment au sommet est directement accessible.
  • File : Une structure linĂ©aire de type FIFO, dans laquelle le premier Ă©lĂ©ment entrĂ© est le premier sorti, avec insertion en queue et suppression en tĂȘte.

Points essentiels

★ À maütriser

🔄 Processus — L’empilement crĂ©e un maillon, place la donnĂ©e dans ce maillon, le relie Ă  l’ancien debut, actualise debut et incrĂ©mente taille.

🔄 Processus — Le dĂ©pilement retire le maillon pointĂ© par debut, avance debut vers le maillon suivant, rĂ©cupĂšre la donnĂ©e, libĂšre le maillon et dĂ©crĂ©mente taille, sauf si la pile est vide.

🔄 Processus — L’enfilement crĂ©e un maillon et l’ajoute Ă  fin, en faisant aussi pointer debut vers ce maillon lorsque la file est vide, puis incrĂ©mente taille.

🔄 Processus — Le dĂ©filement retire le maillon pointĂ© par debut, avance debut, rĂ©cupĂšre sa donnĂ©e, libĂšre le maillon, dĂ©crĂ©mente taille et met fin Ă  NULL si la file devient vide.

Astuce mémo

LIFO contre FIFO

7. Applications des piles

Points essentiels

★ À maütriser

🔄 Processus — Pour reconnaĂźtre un mot bien parenthĂ©sĂ©, on empile chaque parenthĂšse ouvrante et on dĂ©pile la parenthĂšse correspondante Ă  chaque parenthĂšse fermante; le mot est acceptĂ© si la pile n’est jamais vide lors d’une fermeture et est vide Ă  la fin.

🔄 Processus — L’évaluation postfixĂ©e empile les valeurs et, pour chaque opĂ©rateur, dĂ©pile ses opĂ©randes, applique l’opĂ©ration dans l’ordre appropriĂ©, puis empile le rĂ©sultat; la seule valeur restante est le rĂ©sultat final.

🔄 Processus — La conversion infixe-postfixĂ©e envoie directement les opĂ©randes dans la sortie, empile les opĂ©rateurs selon leur prĂ©cĂ©dence et dĂ©pile les opĂ©rateurs de prĂ©cĂ©dence supĂ©rieure ou Ă©gale avant d’empiler l’opĂ©rateur courant.

⚡ La notation infixĂ©e place les opĂ©rateurs entre leurs opĂ©randes, la notation prĂ©fixĂ©e place l’opĂ©rateur avant ses opĂ©randes et la notation postfixĂ©e place l’opĂ©rateur aprĂšs ses opĂ©randes.

Compléments

  • L’expression postfixĂ©e 6 5 2 3 + 8 * + 3 + * a pour valeur finale 288.

Astuce mémo

Empiler pour analyser et calculer

8. Arbres binaires

Notions clés & Définitions

  • Arbre binaire : Une structure dynamique non linĂ©aire dont chaque nƓud possĂšde au maximum deux fils, appelĂ©s fils gauche et fils droit.

Points essentiels

★ À maütriser

⚡ Dans un arbre, la racine n’a pas de pùre, une feuille n’a pas de fils et un nƓud interne possùde au moins un fils.

  • Un nƓud d’arbre binaire contient une information, un pointeur vers le sous-arbre gauche et un pointeur vers le sous-arbre droit.

🧼 Formule — La hauteur d’un arbre vide vaut 0 et celle d’un arbre non vide vaut 1 plus le maximum des hauteurs de ses sous-arbres gauche et droit.

⚡ Un parcours en profondeur explore complùtement une branche avant de passer à la suivante, tandis qu’un parcours en largeur visite les nƓuds niveau par niveau.

Compléments

🧼 Formule — Le nombre de nƓuds d’un arbre vide vaut 0 et celui d’un arbre non vide vaut 1 plus la somme des nombres de nƓuds de ses deux sous-arbres.

Astuce mémo

Racine, fils, feuilles

9. Mesures rĂ©cursives d’un arbre

Points essentiels

★ À maütriser

🔄 Processus — Le nombre de nƓuds d’un arbre vide vaut 0 ; sinon il vaut 1 plus la somme des nombres de nƓuds de ses sous-arbres gauche et droit.

🔄 Processus — Le nombre de feuilles d’un arbre vide vaut 0 ; celui d’un arbre dont la racine est une feuille vaut 1 ; sinon il est Ă©gal Ă  la somme des nombres de feuilles de ses deux sous-arbres.

🔄 Processus — Le nombre de nƓuds internes d’un arbre vide ou d’un arbre rĂ©duit Ă  une feuille vaut 0 ; sinon il vaut 1 plus la somme des nombres de nƓuds internes de ses sous-arbres.

Astuce mémo

Vide = 0 ; sinon on décompose en sous-arbres

10. Parcours d’un arbre binaire

Points essentiels

★ À maütriser

📌 Dans un parcours prĂ©fixe RGD, on traite la racine avant le fils gauche puis le fils droit.

📌 Dans un parcours infixe GRD, on traite le fils gauche, puis la racine, puis le fils droit ; appliquĂ© Ă  un arbre binaire de recherche, il fournit les valeurs dans l’ordre croissant.

📌 Dans un parcours postfixe GDR, on traite le fils gauche, puis le fils droit, puis la racine.

Compléments

🔄 Processus — La fonction DFS parcourt rĂ©cursivement un arbre non vide en plaçant le traitement de la racine avant l’appel gauche pour le prĂ©fixe, entre les appels gauche et droit pour l’infixe, ou aprĂšs l’appel droit pour le postfixe.

Astuce mémo

RGD, GRD, GDR : la position de la racine change

11. CrĂ©ation et insertion d’élĂ©ments

Notions clés & Définitions

  • Arbre vide : ReprĂ©sentĂ© par le pointeur NULL.

Points essentiels

★ À maütriser

🔄 Processus — La crĂ©ation d’un arbre Ă  partir d’un Ă©lĂ©ment et de deux sous-arbres consiste Ă  allouer un nƓud, Ă  lui attribuer sa valeur et Ă  placer les deux sous-arbres dans ses fils gauche et droit, puis Ă  renvoyer un pointeur vers ce nƓud.

🔄 Processus — L’insertion simple cherche rĂ©cursivement un fils vide ; si l’arbre est vide, elle crĂ©e un arbre, si un fils est vide, elle y insĂšre le nouvel Ă©lĂ©ment, et sinon elle poursuit l’insertion du cĂŽtĂ© choisi, par exemple Ă  gauche.

📌 Dans un arbre binaire de recherche contenant des entiers, les valeurs du sous-arbre gauche sont infĂ©rieures Ă  la racine et celles du sous-arbre droit lui sont supĂ©rieures ou Ă©gales, les valeurs Ă©gales Ă©tant insĂ©rĂ©es Ă  droite.

Compléments

🔄 Processus — Pour insĂ©rer une valeur dans un arbre binaire de recherche, on crĂ©e un nƓud si l’arbre est vide ; sinon on compare la valeur Ă  la racine et on poursuit rĂ©cursivement Ă  gauche si elle est plus petite, ou Ă  droite dans le cas contraire.

Astuce mémo

Créer, puis insérer selon la structure choisie

12. Recherche et suppression d’un arbre

Points essentiels

★ À maütriser

🔄 Processus — Dans un arbre quelconque, la recherche renvoie 0 si l’arbre est vide, 1 si la racine contient la valeur cherchĂ©e, et sinon le rĂ©sultat logique de la recherche dans les sous-arbres gauche et droit.

🔄 Processus — Dans un arbre binaire de recherche, la recherche renvoie 0 pour un arbre vide, 1 si la racine contient la valeur cherchĂ©e, puis explore le sous-arbre gauche si la valeur cherchĂ©e est plus petite que la racine et le sous-arbre droit sinon.

🔄 Processus — La suppression complĂšte d’un arbre consiste Ă  supprimer rĂ©cursivement le sous-arbre gauche, puis le sous-arbre droit, avant de libĂ©rer la racine ; elle correspond donc Ă  un parcours postfixe.

⚡ Dans un arbre quelconque, la recherche peut explorer les deux sous-arbres, tandis que dans un arbre binaire de recherche elle suit une seule branche grñce à l’ordre des valeurs.

Compléments

📌 Dans le cours, la suppression d’un nƓud est limitĂ©e Ă  la suppression d’une feuille, car supprimer un nƓud possĂ©dant des fils impose de rĂ©organiser ou de supprimer ses sous-arbres.

  • Dans un arbre quelconque, le temps de recherche peut nĂ©cessiter le parcours de presque tous les nƓuds, tandis que dans un arbre binaire de recherche il est proportionnel Ă  la hauteur de l’arbre.

Astuce mémo

Recherche guidée ou exhaustive ; suppression des feuilles

Tableaux de synthĂšse

Tableaux et listes chaßnées

DimensionTableauListe chaßnée
AccĂšsDirect au iᔉ Ă©lĂ©mentSĂ©quentiel depuis la tĂȘte
MĂ©moireÉlĂ©ments contigusMaillons dispersĂ©s possibles
TailleFixĂ©e Ă  l’avanceAdaptĂ©e au nombre d’élĂ©ments
Insertion et suppressionPeu flexiblesRéalisées par modification des pointeurs

Pile et file

StructureInsertionSuppressionOrdre
PileTĂȘteTĂȘteLIFO
FileQueueTĂȘteFIFO

PiÚges & confusions fréquents

  1. L’adressage indirect utilise l’adresse de la variable au lieu de son nom.
  2. Les nombres complexes ne permettent pas directement ces opĂ©rations d’ordre ou d’égalitĂ© gĂ©nĂ©rale en C.
  3. Les variables utilisées par les programmes sont généralement stockées en RAM, plus rapide que la mémoire de masse.
  4. Le dernier maillon pointe vers NULL et non vers le premier maillon.
  5. Le pointeur precedent du premier élément et le pointeur suivant du dernier élément valent NULL.
  6. Une pile insĂšre et supprime en tĂȘte, contrairement Ă  une file.
  7. Une pile vide à la fin ne suffit pas si elle est devenue vide trop tît lors d’une fermeture.

Test your knowledge

Test your knowledge on Listes, piles, files et arbres with 46 multiple-choice questions with detailed corrections.

1. Quel type d’adressage permet d’accĂ©der au contenu d’une variable en utilisant le nom de cette variable ?

2. Dans un programme C, qu’est-ce qu’un pointeur contient prĂ©cisĂ©ment ?

Take the quiz →

Review with flashcards

Memorize the key concepts of Listes, piles, files et arbres with 91 interactive flashcards.

Qu'est-ce que l’adressage direct en programmation ?

AccĂ©der au contenu d’une variable par son nom.

Qu'est-ce qu'un pointeur en C ?

Une variable qui contient l’adresse d’une autre variable et est typĂ©e.

Que fait l’opĂ©rateur & en langage C ?

Il rĂ©cupĂšre l’adresse d’une variable.

See flashcards →

Similar courses

Create your own revision sheets

Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.

Sheet generator