Listes Chaînées

50 tarjetas

Explore la définition, la représentation (nœuds, pointeurs), les traitements (création, insertion, suppression) et les différentes approches des listes chaînées en informatique, avec des exemples et illustrations détaillés.

50 tarjetas

Repasar
La repetición espaciada te muestra cada tarjeta en el momento óptimo para memorizar a largo plazo, con repasos cada vez más espaciados.
Pregunta
Qu'est-ce qu'un type abstrait de données ?
Respuesta
Une spécification mathématique d'un ensemble de données et de ses opérations, indépendamment de son implémentation concrète.
Pregunta
Quelle est la différence entre un type abstrait et une structure de données ?
Respuesta
Le type abstrait est la spécification (le quoi), la structure de données est l'implémentation (le comment).
Pregunta
À quoi sert la notation big O ?
Respuesta
Elle mesure la performance et l'efficacité d'un algorithme en fonction de la taille des données en entrée.
Pregunta
Que signifie une complexité de O(1) ?
Respuesta
La complexité est constante ; le temps d'exécution ne dépend pas de la taille des données.
Pregunta
Qu'est-ce qu'une représentation contiguë des données ?
Respuesta
Les données sont stockées dans un espace mémoire adjacent, sans interruption ni fragmentation.
Pregunta
Citez un avantage de la représentation contiguë.
Respuesta
Accès rapide aux données (souvent en O(1)) et utilisation optimale de la mémoire cache.
Pregunta
Citez un inconvénient de la représentation contiguë.
Respuesta
Taille généralement fixe et difficulté d'insertion ou de suppression d'éléments.
Pregunta
Quelle est la différence entre un tableau statique et dynamique ?
Respuesta
Un tableau statique a une taille fixe, tandis qu'un tableau dynamique peut changer de taille pendant l'exécution.
Pregunta
Quelle est la complexité d'accès à un élément d'un tableau statique ?
Respuesta
La complexité est de O(1) car l'accès est direct via l'indice.
Pregunta
Pourquoi est-il utile de trier un tableau ?
Respuesta
Pour faciliter et accélérer la recherche, ainsi que pour hiérarchiser et analyser les données.
Pregunta
Citez deux algorithmes de tri.
Respuesta
Tri par insertion, tri par sélection, tri à bulles, tri rapide, ou tri fusion.
Pregunta
Qu'est-ce qu'une structure de type enregistrement ?
Respuesta
Elle regroupe des données de types différents en une seule unité, où chaque donnée est un champ nommé.
Pregunta
Comment accède-t-on à un champ d'une variable de type enregistrement ?
Respuesta
Avec l'opérateur point (.), comme dans `variable.nom_champ`.
Pregunta
Quelle est la complexité d'accès à un champ d'un enregistrement ?
Respuesta
La complexité est de O(1).
Pregunta
Quel est le principe de la recherche linéaire (ou séquentielle) ?
Respuesta
Parcourir le tableau élément par élément depuis le début jusqu'à trouver la valeur cible.
Pregunta
Quelle condition un tableau doit-il remplir pour permettre une recherche binaire ?
Respuesta
Le tableau doit être trié au préalable.
Pregunta
Comment fonctionne la recherche binaire (dichotomique) ?
Respuesta
Elle divise récursivement le tableau en deux et ne cherche que dans la moitié pertinente.
Pregunta
Qu'est-ce qu'une liste chaînée ?
Respuesta
Un ensemble de nœuds de même nature, liés les uns aux autres par des pointeurs.
Pregunta
De quoi est composé un nœud dans une liste chaînée ?
Respuesta
D'un ou plusieurs champs de données et d'au moins un pointeur vers le nœud suivant.
Pregunta
Comment est indiquée la fin d'une liste chaînée simple ?
Respuesta
Le pointeur `suivant` du dernier élément pointe sur Nil.
Pregunta
Comment appelle-t-on le premier élément d'une liste chaînée ?
Respuesta
La tête de liste.
Pregunta
Comment insérer un élément en tête de liste ?
Respuesta
Le `suivant` du nouvel élément pointe vers l'ancienne tête, et la tête de liste pointe vers le nouvel élément.
Pregunta
Comment insérer un élément en queue de liste ?
Respuesta
On parcourt la liste jusqu'au dernier nœud, puis on fait pointer son `suivant` vers le nouvel élément.
Pregunta
Que faut-il faire avant de supprimer la tête d'une liste ?
Respuesta
Il faut déplacer le pointeur de tête sur le deuxième élément pour ne pas perdre l'accès à la liste.
Pregunta
Quel est le principal avantage des listes chaînées sur les tableaux ?
Respuesta
L'insertion et la suppression d'éléments sont plus efficaces et la taille est dynamique.
Pregunta
Quel est l'inconvénient de l'accès aux éléments d'une liste chaînée ?
Respuesta
L'accès est séquentiel (O(n)), on ne peut pas accéder directement à un élément par son indice.
Pregunta
Dans quel cas la recherche linéaire est-elle plus adaptée que la recherche binaire ?
Respuesta
Quand le tableau n'est pas trié, ou pour de très petites collections de données.
Pregunta
Qu'est-ce qu'un pointeur ?
Respuesta
Une variable qui stocke l'adresse mémoire d'une autre donnée, comme un nœud.
Pregunta
Que représente `Nil` ou `NULL` ?
Respuesta
Un pointeur qui ne référence aucune adresse mémoire, souvent utilisé pour marquer la fin d'une liste.
Pregunta
Comment gère-t-on l'insertion dans une liste triée ?
Respuesta
On parcourt la liste pour trouver la bonne position, puis on insère le nœud en liant le prédécesseur et le successeur.
Pregunta
Quel algorithme de tri compare et permute les éléments adjacents ?
Respuesta
Le tri à bulles.
Pregunta
Quel algorithme de tri trouve le plus petit élément et le met à sa place ?
Respuesta
Le tri par sélection.
Pregunta
Comment fonctionne le tri par insertion ?
Respuesta
Il construit le tableau trié un élément à la fois, en insérant chaque élément à sa place correcte.
Pregunta
Qu'est-ce qu'un arbre binaire de recherche ?
Respuesta
Un arbre où chaque nœud a une valeur supérieure à tous les nœuds de son sous-arbre gauche et inférieure à ceux de son sous-arbre droit.
Pregunta
Qu'est-ce qu'un graphe en informatique ?
Respuesta
Une structure composée de sommets (nœuds) et d'arêtes (liens) reliant ces sommets.
Pregunta
Qu'est-ce qu'un algorithme glouton ?
Respuesta
Un algorithme qui fait le choix paraissant optimal à chaque étape, espérant trouver une solution globale optimale.
Pregunta
Quelle opération est nécessaire pour créer un nouveau nœud dans une liste chaînée ?
Respuesta
L'allocation dynamique de mémoire pour le nouveau nœud.
Pregunta
Que se passe-t-il si on supprime un nœud sans mettre à jour le pointeur du nœud précédent ?
Respuesta
La chaîne de la liste est rompue, rendant les éléments suivants inaccessibles.
Pregunta
Comment la fonction `creerListe` initialise-t-elle une liste ?
Respuesta
En affectant la valeur `Nil` au pointeur du premier élément (`L.premier`).
Pregunta
Dans le cas d'une suppression, pourquoi faut-il deux pointeurs ?
Respuesta
Un pointeur pour l'élément à supprimer et un autre pour son prédécesseur, afin de pouvoir reconnecter la liste.
Pregunta
Quel est le rôle de la récursivité dans certains algorithmes de tri (ex: tri fusion) ?
Respuesta
Elle permet de diviser le problème en sous-problèmes plus petits, qui sont ensuite résolus et combinés.
Pregunta
Qu'est-ce qu'un problème NP-complet ?
Respuesta
Un problème de décision pour lequel il est difficile de trouver une solution, mais facile de vérifier une solution donnée.
Pregunta
Comment accéder au contenu d'un nœud pointé par `P` ?
Respuesta
En utilisant la notation `P^.champ` ou une syntaxe équivalente comme `P->champ`.
Pregunta
Définissez un arbre en théorie des graphes.
Respuesta
Un graphe connexe et acyclique, c'est-à-dire sans cycle et où il existe un chemin entre toute paire de sommets.
Pregunta
Quelle est la différence fondamentale entre un tableau et une liste chaînée ?
Respuesta
Le tableau a une mémoire contiguë et un accès par indice, la liste a une mémoire dispersée et un accès séquentiel.
Pregunta
À quoi peut servir une liste chaînée dans un cas pratique ?
Respuesta
Gérer une playlist musicale, l'historique d'un navigateur, ou la file d'attente d'une imprimante.
Pregunta
Pourquoi la recherche dichotomique est-elle si efficace sur de grands tableaux ?
Respuesta
Car elle élimine la moitié des éléments restants à chaque comparaison, sa complexité est logarithmique (O(log n)).
Pregunta
Qu'est-ce que la concaténation de deux listes ?
Respuesta
L'action de joindre deux listes en faisant pointer le dernier élément de la première vers la tête de la seconde.
Pregunta
Que signifie `P^.suivant <- L.premier` ?
Respuesta
Le champ `suivant` du nœud pointé par `P` pointe désormais vers le premier nœud de la liste `L`.
Pregunta
Comment peut-on représenter un polynôme avec une liste chaînée ?
Respuesta
Chaque nœud représente un monôme, contenant le coefficient et l'exposant, et pointe vers le monôme suivant.

ALGORITHMIQUE AVANCÉE ET OPTIMISATION

Ce document couvre les concepts fondamentaux de l'algorithmique avancée, l'optimisation, et les structures de données essentielles pour les étudiants en L2 IRT. Il met l'accent sur la compréhension et l'application pratique des types abstraits de données, des structures de données, de la complexité algorithmique, des représentations de données (contiguës et chaînées), ainsi que des algorithmes de recherche et de tri.

Définitions Générales

  • Type Abstrait de Données (TAD) : Une spécification mathématique d'un ensemble de données et des opérations applicables, sans détailler la représentation ou l'implémentation.
    Exemples : Tableau, liste, file, pile, ensemble, arbre.
    Caractéristiques : Nom, opérations (avec spécifications et complexité), mode d'utilisation, rôle/comportement, complexité temporelle.
    Nota : Un TAD est indépendant de son implémentation.

  • Structure de Données : Une manière spécifique d'organiser et de stocker des données pour faciliter leur traitement (création, stockage, accès, extraction, suppression).
    Exemple : Une liste chaînée peut implémenter un TAD "liste".
    Relation TAD vs. Structure de Données: C'est le lien entre l'abstraction et la réalisation, la spécification et l'implémentation, le "quoi" et le "comment". Le choix d'une structure dépend du TAD, des contraintes et des objectifs du problème.

  • Complexité : Mesure des ressources (temps, espace) nécessaires à l'exécution d'un algorithme. Elle permet de comparer l'efficacité des algorithmes.
    Notation Standard : Big (notation de Landau) pour mesurer la performance en fonction de la taille des données en entrée. Exemple : indique une complexité linéaire.

Représentation Contiguë de Données

Ce sont des structures stockant les données dans un espace mémoire adjacent.

  • Exemples : Tableaux, Structures composées finies, Enregistrements.

  • Avantages : Meilleure performance d'accès, utilisation optimale de la mémoire, simplicité d'implémentation.

  • Inconvénients : Difficulté de modification (insertion/suppression), taille fixe prédéfinie, dépendance à l'ordre physique des données.

Les Tableaux

Un tableau est une structure de données qui permet de stocker des éléments de même type dans un espace mémoire contigu.

Caractéristiques

  • Un tableau a un nom (identificateur).

  • Les éléments sont stockés dans des cases contiguës (cellules) et accessibles par le nom du tableau et un indice.

  • Peuvent être unidimensionnels (une seule ligne/colonne) ou multidimensionnels (plusieurs lignes/colonnes).

  • Deux types :

    • Tableaux Statiques : taille fixe et prédéfinie.

    • Tableaux Dynamiques :taille variable.

  • Utilité : Regrouper plusieurs variables de même nature sous un même nom.

Complexité et Opérations

  • Complexité d'accès :

    • Tableau Statique : (temps d'accès indépendant du nombre de cellules).

    • Tableau Dynamique : Généralement , mais peut atteindre selon l'implémentation.

  • Opérations applicables :

    • Création.

    • Initialisation (accès en écriture).

    • Consultation (accès en lecture).

    • Modification (mise à jour des éléments ou de la taille pour les dynamiques).

    • Tri.

    • Suppression (pour les dynamiques).

Tableaux Statiques

Déclaration/Création

Syntaxe :

Tableau Nom_du_Tableau[taille du tableau] en type_élément_du_tableau
Ou
Tableau Nom_du_Tableau[taille du tableau] de type_élément_du_tableau

Exemples :

Tableau Note[5] en réel

Tableau Note[5] de réels

Tableau Age[10] en Entier

Tableau Age[10] d'Entiers

Tableau Nom[25] en caractère

Tableau Nom[25] de caractères

Accès aux Cellules (Écriture ou Lecture)

L'accès se fait via le nom du tableau et l'indice de la cellule.

  • Convention d'Indice : Nous adopterons la valeur 0 pour la première cellule (logique de gestion mémoire), tout en reconnaissant la validité de l'indice 1 (logique humaine).

  • Accès en écriture :

    • nom_tableau[indice] ← valeur (affectation directe)

    • Lire (nom_tableau[indice]) (affectation depuis l'entrée standard)

  • Accès en lecture :

    • nom_variable ← nom_tableau[indice] (récupération dans une autre variable)

    • Ecrire (nom_tableau[indice]) (affichage du contenu)

Exemple de Création et d'Accès

Algorithme Exemple
    Variable Nb en Entier
    Tableau Tab[10] d'Entiers
Début
    Tab[1] ← 5
    Ecrire("Entrer la valeur de la cellule 2")
    Lire (Tab[2])
    Nb ← Tab[1]
    Ecrire("T[2] contient : ", Tab[2])
Fin

Tri de Tableaux

Organiser le contenu d'un tableau selon un critère de comparaison des éléments.

  • Objectifs du tri :

    • Hiérarchisation et lisibilité.

    • Facilitation de la recherche.

    • Facilitation des opérations de suppression/ajout.

    • Préparation à d'autres traitements (analyse de données).

  • Algorithmes de tri : Choisis en fonction des objectifs, complexité temporelle, coût en mémoire, facilité d'implémentation et taille du tableau.

    • Tri par insertion

    • Tri par sélection

    • Tri à bulles

    • Tri rapide

    • Tri fusion

    • Tri par comptage

Les Enregistrements

Les enregistrements (ou structures) regroupent des données de types différents en une seule entité. Les "Structures composées finies" sont un cas particulier d'enregistrements avec des champs de longueur fixe.

Structure de type Enregistrement

Regroupe un ensemble de données de types différents en une seule unité, chaque élément étant associé à un nom (champ) pour lecture/modification.

  • Les enregistrements peuvent avoir des champs de longueur variable, les rendant plus flexibles que les structures composées finies.

  • Unenregistrement a un nom (identificateur).

  • Les éléments sont appelés champs, généralement de taille fixe mais potentiellement variable. Ils peuvent être de types de base, pointeurs, structurés ou un mélange.

  • Les structures à champs de taille fixe permettentune représentation contiguë ; celles à champs de taille variable peuvent ne pas le permettre.

  • Utilité :

    • Regrouper des données de types différents mais apparentées.

    • Créer des entités complexes.

    • Gérer des enregistrements agrégés (fichiers, bases de données).

    • Améliorer la lisibilité du code.

    • Passer des données complexes en paramètre.

  • Complexité d'accès aux champs : .

  • Opérations applicables : Création d'instances, initialisation/consultation/modification des champs, suppression d'instances.

Déclaration/Création

Syntaxe de déclaration d'un type enregistrement :

STRUCTURE Nom_Structure
    champ_1 en type_1
    champ_2 en type_2
    *
    *
    champ_n en type_n
FIN STRUCTURE

Exemples :

STRUCTURE Point
    x en Entier
    y en Entier
FIN STRUCTURE

STRUCTURE Personne
    nom enChaine
    age en Entier
    sexe en Caractère
FIN STRUCTURE

Création d'une variable d'un type Enregistrement

Syntaxe de déclaration :

Nom_variable en Nom_Structure

Exemples :

A en Point
P1 en Personne

Nota : Les champs sontles propriétés des variables d'un type enregistrement. Ainsi, A (type Point) a les champs x et y ; P1 (type Personne) a les champs nom, age, et sexe.

Accès aux Champs

Utilise l'opérateur point (.) entre le nom de la variable et le nom du champ.

  • Accès en écriture :

    • nom_variable.nom_champ ← valeur

    • Lire(nom_variable.nom_champ)

  • Accès en lecture :

    • nom_variable ← nom_variable.nom_champ

    • Ecrire(nom_variable.nom_champ)

Exemple 1 : Point

Algorithme Exemple_Point
    Variable P1 en Point
Début
    Ecrire("Entrer l'abscisse du point : ")
    Lire (P1.x)
    Ecrire("Entrer l'ordonnée du point : ")
    Lire (P1.y)
    Ecrire("Le point P1 a pour coordonnées : ",P1.x, " et " , P1.y)
Fin

Exemple 2 : Personne

Algorithme Exemple_Personne
    Variable E1 en Personne
Début
    E1.nom ← "Moussa"
    E1.age ← 19
    E1.sexe ← 'M'
    Ecrire("Je suis : ", E1.nom, " de sexe : ", E1.sexe, " et j'ai " , E.age, "ans")
Fin

Les algorithmes de Recherche

Applicables aux tableaux, ces algorithmes visent à trouver une valeur cible. Deux types principaux sont abordés ici.

La Recherche Linéaire (ou Séquentielle)

Parcourt le tableau élément par élément depuis le début jusqu'à trouver la valeurcible ou atteindre la fin du tableau.

Premier code

Une autre variante

FUNCION RechSeq (tableau[n] en Entier, valeur en Entier)

FUNCION RechSeq (tableau[n] en Entier, valeur en Entier)

Variables

Variables

trouver en Booléen

i en Entier

i en Entier

Début

Début

trouver ← faux

TANT QUE i <= n FAIRE

i=1

SI tableau[i] = valeur ALORS

TANT QUE (i <= n) ET (trouver = faux) FAIRE

RETOURNER 1 // La valeur a été trouvée

SI tableau[i] = valeur ALORS

FINSI

trouver ← vrai

SINON

FIN TANT QUE

RETOURNER -1 // La valeur n'a pas été trouvée

FIN SI

FIN

FINTANT QUE

RETOURNER trouver

FIN

La Recherche Binaire (ou Dichotomique)

S'utilise sur un tableau trié. Elle divise le tableau en deux à chaque étape et compare la valeur cible avec l'élément médian, éliminant ainsi la moitié du tableau. Plus efficace que la recherche linéaire pour les grands tableaux triés.

FONCTION RechDicho(tableau[n]en Entier, valeur en Entier)
Variables
    first, milieu, last en Entier
DEBUT
    first ← 1
    last ← n // C'est longueur(tableau)
    TANT QUE first <= last FAIRE
        milieu ← (first + last) DIV 2
        SI tableau[milieu] = valeur ALORS
            RETOURNER milieu // La valeur cible a été trouvée
        SINON SI tableau[milieu] < valeur ALORS
            first ← milieu + 1
        SINON
            max ← milieu - 1
        FIN SI
    FIN TANT QUE
    RETOURNER -1*valeur // La valeur cible n'a pas été trouvée
FIN

Nota : Proposer un code qui fait la recherche Binaire mais qui retourne un booléen plutôt que lavaleur recherchée ou son opposée.

Listes Chaînées

Face aux limites des structures à représentation contiguë (statiques), les listes chaînées offrent une solution dynamique. Elles peuvent s'agrandir ou diminuer au fil du temps.

Définition

Une liste chaînée est un ensemble de nœuds de même nature, liés les uns aux autres par des pointeurs. Chaque nœud est une structure de données contenant un ou plusieurs champs de données et au moins un pointeur vers le nœud suivant.

Uneliste est un ensemble fini d'éléments , où est le premier élément. Si , la liste est vide.

Représentation d'une liste chaînée

Représentation

Bien qu'une représentation tabulaire soit possible (deux tableaux : un pour les éléments, un pour l'ordre), seule la représentation chaînée à base de pointeurs est abordée ici.

Deux approches pour la représentation chaînée :

  1. Utilisation de deux structures de type Enregistrement.

  2. Utilisation d'un pointeur et d'unestructure de type Enregistrement.

La première approche sera privilégiée dans ce cours.

Première Approche

Une structure Noeud pour les éléments et une structure Liste pour la liste.

STRUCTURE Noeud
    champ_1 en type_1
    champ_2 en type_2
    ...
    champ_n en type_n
    suivant en ^Noeud
FIN STRUCTURE

SRTUCTURE Liste
    premier en ^Noeud
FIN STRUCTURE

Structure d'une liste chaînée avec Noeud et Liste

Note : La structure `Liste` n'a qu'un seul champ, un pointeur vers le premier élément (la tête de liste).

Accès et Traitements

L'accès aux éléments se fait en suivant les pointeurs, à partir du pointeur sur le premier élément (tête de liste). Quand un pointeur vaut`Nil`, c'est la fin de la liste.

Traitements Applicables

Une liste non exhaustive des traitements pour les listes chaînées :

Traitement

Paramètres en entrée

Résultat

creerListe

Liste

Liste vide

estListe_vide

liste

Booléen

listeVide

Pointeur [,élément]

Liste vide

ajouterElement

liste, élément, position

Liste

supprimerElement

Liste, position

Liste

detruireListe

Liste

Rien ou booléen

longueurListe

Liste

Entier

accesElement

Liste, position

Pointeur sur place ou nœud

rechercherElement

Liste, contenu

Position (si 0 donc non trouvé)

Successeur

Pointeur sur place ou nœud

Pointeur sur place ou nœud

Contenu

Pointeur sur place ou nœud

Valeur(s) champ(s)

Tête

Liste

Pointeur sur place ou nœud

Premier

Liste

Contenu(Tête)

permuterElements

Liste, position 1 et position 2

Liste

Concatener

Liste 1, Liste 2

Liste

Créer une liste vide

Fonction creerListe(L en Liste)
Début
    L.premier ← Nil
    retourner L
Fin

Insérer un élément en tête de Liste

Insertion en tête de liste chaînée

Fonction RemplirNoeud( N en Noeud)
Début
    N.champ_1 ← valeur_1 // on peut aussi lire
    ... // les valeurs au clavier
    N.champ_n ← valeur_n
    N.suivant ← Nil
Fin

//Ajout d'un nœud en tête de liste
Fonction AjouterNoeud(L en Liste, N en Noeud )
Début
    N.suivant ← L.premier
    L.premier ← adresse (N)
    Retourner L
Fin

Insérer un élément en queue de Liste

Insertion en queue de liste chaînée
  1. Un pointeur `P2` est placé sur le premier élément.

  2. Si le premier est `Nil`, le nouveau nœud devient le premier.

  3. Sinon, `P2` parcourt la liste jusqu'à l'avant-dernier élément (celui dont le `suivant` est `Nil`).

  4. Le `suivant` dudernier élément (`P2^.suivant`) pointe alors vers le nouveau nœud.

Fonction RemplirNoeud( N en Noeud)
Début
    N.champ_1 ← Valeur_1 // on peut aussi lire
    ...
    N.champ_n ← Valeur_n
    N.suivant ← Nil
Fin

//Ajout d'un nœud en queue de liste
Fonction AjouterNoeud(L en Liste, N en Noeud )
Variables p, p2 en ^Noeud
Début
    p ← adresse(N)
    Si L.premier = Nil alors
        L.premier ← p
    sinon
        p2 ← L.premier
        Tant que p2^.suivant <> Nil Faire
            p2 ← p2^.suivant
        FinTantque
        p2^.suivant ← p
    FinSi
    Retourner L
Fin

Gestion directe des créations de nœuds

Cas d'insertion en tête de liste

Fonction AjouterNoeud(L en Liste )
Variable P en ^Noeud
Début
    //Allocation dynamique de mémoire
    P ← allouer(taille(Noeud))
    //Renseignement des champs du nœud
    Lire(P^.champ_1)
    ...
    Lire(P^.champ_n)
    //Insertion du nœud en tête de liste
    P^.suivant ← L.premier
    L.premier ← P
    //on retourne la nouvelle liste
    Retourner L
Fin

Cas d'insertion en queue de liste

//Ajout d'un nœud en queue de liste
Fonction AjouterNoeud(L en Liste)
Variables P,P2 en ^Noeud
Début
    //Allocation dynamique demémoire
    P allouer(taille(Noeud))
    //Renseignement des champs du nœud
    Lire(P^.champ_1)
    ...
    Lire(P^.champ_n)
    P^.suivant ← Nil //initialisation par précaution
    Si L.premier = Nil alors
        L.premier ← p
    sinon
        p2 ← L.premier
        Tant que p2^.suivant <> Nil Faire
            p2 ← p2^.suivant
        FinTantque
        p2^.suivant ← p
    FinSi
    Retourner L
Fin

Insertion à une position quelconque

Permet d'insérer un nouveau nœud en fonction d'un critère, avant ou après un nœud spécifique, ou en maintenant un ordre croissant/décroissant.

Insertion à une position quelconque dans une liste chaînée
  • Si la liste est vide ou le nouvel élément doit précéder le premier, utiliser l'insertion en tête.

  • Sinon, rechercher l'élément prédécesseur de l'emplacement d'insertion (avec un pointeur `P2`).

  • Le `suivant` du nouveau nœud (pointé par `P`) devient le `suivant` du prédécesseur (pointé par `P2`).

  • Le`suivant` du prédécesseur (pointé par `P2`) devient le nouveau nœud (pointé par `P`).

Fonction AjouterNoeud(L en Liste, N en Noeud )
Variables p,p2 en ^Noeud
Début
    p ← adresse (N)
    Si L.premier = Nil ou L.premier.champ_critère est satisfait alors
        p^.suivant ← L.premier
        L.premier ← p
    sinon
        p2 ← L.premier //on met un nouveau pointeur sur la tête
        Tant quep2^.suivant <> Nil et p2^.suivant.champ_critère pas satisfait Faire
            p2 ← p2^.suivant
        FinTantque
        p^.suivant ← p2^.suivant
        p2^.suivant ← p
    FinSi
    Retourner L
Fin

Suppression d'un élément d'une liste

Implique la recherche de l'élément puis sa suppression en préservant le chaînage.

  • Si la liste est vide, ne rien faire.

  • Suppression en tête: Déplacer la tête avant la suppression pour ne pas la perdre.

  • Suppression en queue : Parcourir jusqu'à l'avant-dernier élément, pointer sur son suivant, puis isoler et supprimer le dernier élément.

  • Suppressionà une position donnée (selon critère) : Rechercher l'élément et son prédécesseur, puis ajuster les pointeurs.

Illustrations de suppression dans une liste chaînée

Exercice

Pour illustrer la suppression, considérons une liste chaînée de monômes représentant un polynôme.

  1. Proposez une structure de données pour représenter un monôme.

  2. Proposez une structure pour représenter un polynôme.

  3. Proposez un programme pour construire le polynôme suivant : .

  4. Écrivez une fonction pour supprimer du polynôme le monôme dont le degré est 2.

  5. Écrivez une fonctionqui parcourt la nouvelle liste (nouveau polynôme) et l'affiche de la façon suivante : .

C'est en forgeant qu'on devient forgeron. Alors, bonne chanceà vous.

Programmes Avancés

Contenu additionnel du cours pour compléter la section.

  • Structures de données et type abstrait

  • Représentation contiguë et chaînée

  • Recherche ettris avancés

  • Arbres binaires, arbres planaires généraux et Arbres binaires de recherche

  • Graphes

  • Introduction aux algorithmes gloutons

  • Introduction aux problèmes NP-complets

  • Introduction aux algorithmes par évaluation et séparation

  • Introduction aux algorithmes d'approximation

  • Introduction aux algorithmes probabilistes

Pensée Inspirante

"The way to get started is to quit talking and begin doing."
Walt Disney

Résumé Final

Avec PowerPoint, vous pouvez créer des présentations et partager votre travail avec d'autres, où qu'ils soient. Tapez le texte que vous voulez ici pour commencer. Vous pouvez également ajouter des images, des œuvres d'art et des vidéos sur ce modèle. Enregistrez sur OneDrive et accédez àvos présentations depuis votre ordinateur, votre tablette ou votre téléphone.

Empezar cuestionario

Prueba tus conocimientos con preguntas interactivas