Listes Chainées Et Les Files

download Listes Chainées Et Les Files

of 3

Transcript of Listes Chainées Et Les Files

  • Solutionnaire pour les exercices sur les listes chanes et les files

    1. Dfinition rcursive dune liste simplement chane (aprs vrification avec Sylvie, il

    vaut mieux la dfinir avec un algorithme, en oubliant le formalisme mathmatique.)

    Une liste est soit vide soit un nud (ou cellule) suivi dune liste. Un nud est compos

    dun Objet suivi dune rfrence vers un Nud.

    Nud

    {

    Objet (qui peut tre une rfrence)

    Rfrence vers un Nud (Suivant)

    }

    Nouvelle Liste (Nud, Liste)

    {

    Si Liste = NULL Faire

    Liste := Nud;

    Retourner Liste

    Sinon

    Liste = Liste. Suivant

    Fin Si

    Nouvelle Liste (Nud, Liste)

    }

    2. Voici une mthode pour insrer un lment au dbut dune liste simplement chane.

    On garde le pointeur de la Tte dans un pointeur temporaire. On fait ensuite pointer le

    dbut de la liste au nouveau nud insrer. Puis on met le suivant de cet objet au

    pointeur temporaire gard.

    Temporaire := Tte

    Tte := Nouveau

    Tte. Suivant := Temporaire

    3. Programme rcursif qui supprime le dernier lment dune liste simplement chane.

    SupprimerDernier (Courant, soit un pointeur sur un nud de la liste) {

    Si Courant. Suivant nest pas vide faire

    Courant := Courant. Suivant

    SupprimerDernier (Courant)

    Sinon

    Effacer le contenu de Courant

    Mettre Courant NULL

    Fin si }

    On pourrait remplacer les lignes Effacer le contenu de Courant et Mettre Courant

    NULL par Dpiler (Courant) .

  • 4. Voici un algorithme rcursif pour concatner deux listes doublement chanes L et M en

    une seule liste L contenant tous les nuds de L puis tous les nuds de M.

    Concatner (Courant = Dbut de L, Dbut de M)

    {

    Si Courant = Fin de L Faire

    Courant. Suivant := Dbut de M

    Dbut de M. Prcdent := Courant

    Retourner L (qui contiendra les deux listes concatnes)

    Fin si

    Concatner (Courant, Dbut de M)

    }

    5. Voici la sortie de la srie doprations :

    Ajouter (5)

    Ajouter (3)

    Enlever () Enlve et retourne 5

    Ajouter (2)

    Ajouter (8)

    Enlever () Enlve et retourne 3

    Enlever () Enlve et retourne 2

    Ajouter (9)

    Ajouter (1)

    Enlever () Enlve et retourne 8

    Ajouter (7)

    Ajouter (6)

    Enlever () Enlve et retourne 9

    Enlever () Enlve et retourne 1

    Ajouter (4)

    Enlever () Enlve et retourne 7

    Enlever () Enlve et retourne 6

    5

    3 5

    2 3

    8

    8 9

    1

    9 1 7

    6

    4

    2 3

    8 9

    9 1 7

    6 7

  • 6. Voici la sortie de la srie doprations :

    AjouterDbut (3)

    AjouterFin (8)

    AjouterFin (9)

    AjouterDbut (5)

    EnleverDbut () Enlve et retourne 5

    EnleverFin () Enlve et retourne 9

    AjouterFin (7)

    EnleverDbut () Enlve et retourne 3

    7. On performe 32 oprations ajouter(objet), 10 oprations devant() et 15 oprations

    enlever() parmi lesquelles 5 ont gnr des ExceptionFileVide. Donc 10 oprations

    enlever() ont retir des lments. 32 ajouts 10 retraits = 22 objets restants. Taille

    courante = 22.

    8. Pour implmenter une pile avec deux files, il faudrait utiliser une file pour les oprations

    dempilement et lautre pour les oprations de dpilement. Ainsi, lors de linsertion dun

    objet, on lenfile dans la premire file. Par la suite, on le copie dans la deuxime file, que

    lon inverse, puisquelle devra tre de sens contraire pour que le dernier objet ajout

    soit le premier objet enlev. Ainsi toutes les oprations se feront en temps linaire.

    9. Voici les valeurs renvoyes par les oprations dEnlever

    E A S * Y * Q U E * * * S T * * * I O * N * * *

    sortie E A S Y Q U E S T I O N

    10. Voici les valeurs renvoyes par les oprations denleverDbut et denleverFin.

    E A s + Y + Q U E * * * s t + * + I O * n + + *

    sortie A Y s e q E t U O I S n

    11. Avec la squence EasY

    (i) E+sa**Y+

    (ii) YasE : cest impossible, puisque si je veux enlever le Y, je dois lavoir ajout,

    cest--dire que jai dj ajout a et s la fin de la queue, et que si je veux les

    enlever de la fin de la queue, ils sortiront dans lordre sa et non as .

    (iii) Ea*sY+*+

    (iv) Ea*s*Y++

    3

    8 3

    5

    8 3

    8 3 9

    8 3 9