Listes_Chainees

Embed Size (px)

Citation preview

  • 7/30/2019 Listes_Chainees

    1/62

    Structures de donnes, IMA S6Listes chanes

    daprs un cours dA. Min, NS Ulm.

    Laure Gonnordh t t p : / / l a u r e . g o n n o r d . o r g / p r o / t e a c h i n g /

    L a u r e . G o n n o r d @ p o l y t e c h - l i l l e . f r

    Universit Lille 1 - Polytech Lille

    Fvrier 2011

    http://localhost/var/www/apps/conversion/tmp/scratch_6/[email protected]://laure.gonnord.org/pro/teaching/
  • 7/30/2019 Listes_Chainees

    2/62

    Plan

    1 Introduction

    2 Listes simplement chanes

    StructureOprations

    3 Divers sur les listes chanes

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 2 / 36

  • 7/30/2019 Listes_Chainees

    3/62

    Introduction

    1 Introduction

    2 Listes simplement chanes

    3 Divers sur les listes chanes

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 3 / 36

  • 7/30/2019 Listes_Chainees

    4/62

    Introduction

    Pourquoi ?

    Rappel : la liste contigu.

    t y p e d e f s t r u c t D i s t r i b u t i o n {

    i n t d e r n p e r s ;

    c h a r l i s t p e r s [ M A X N U M P E R S ] [ T A I L L E N O M ] ;

    } D i s t r i b u t i o n ;

    Complexit en nombre de cases vues :

    Impression

    RechercheInsertion dans le cas dune liste non pleine

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 4 / 36

  • 7/30/2019 Listes_Chainees

    5/62

    Introduction

    Pourquoi ? - 2

    Hypothse supplmentaire : liste contigu trie

    Impression

    Recherche

    Insertion dans le cas dune liste non pleine

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 5 / 36

    I d i

  • 7/30/2019 Listes_Chainees

    6/62

    Introduction

    Pourquoi ? - 3

    Et si la liste contigu est pleine ? on ralloue.

    La liste chane va nous donner un moyen de grerlallocation case par case (de manire non contigu).

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 6 / 36

    I t d ti

  • 7/30/2019 Listes_Chainees

    7/62

    Introduction

    Notations algorithmiquesPointeurs :p : pointeur de Entier (pointeur)p (valeur pointe)

    Allocation/Libration de mmoire :Fonction

    a l l o u e r ( ) renvoie un pointeur vers une nouvelle

    cellule alloueActionl i b e r e r ( P )

    rcupre la cellule mmoire pointe parP.

    Structures :Structure pointComplexe

    x : Entiery : Entier

    FStruct

    pc : pointComplexe (dclaration)pc.x, pc.y (pour les accs)

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 7 / 36

    Listes simplement chanes

  • 7/30/2019 Listes_Chainees

    8/62

    Listes simplement chanes

    1 Introduction

    2 Listes simplement chanesStructure

    Oprations

    3 Divers sur les listes chanes

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 8 / 36

    Listes simplement chanes Structure

  • 7/30/2019 Listes_Chainees

    9/62

    Listes simplement chanes Structure

    Principe

    Liste = squence ordonne dlments de mme type.

    Exemple : liste dentiers (12, 43, 27, 9).

    lordre des lments compte : (12, 43, 27, 9) = (12, 27, 43, 9)

    la multiplicit des lments compte(12, 43, 27, 9) = (12, 43, 27, 9, 9)

    Liste simplement chane =

    reprsentation o chaque lment pointe sur le suivant.

    943 2712

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 9 / 36

    Listes simplement chanes Structure

  • 7/30/2019 Listes_Chainees

    10/62

    Listes simplement chanes Structure

    Reprsentation des listes - 1

    Exemple : cellule de liste dentiers :

    Structure Cellulevaleur : Entiersuivant : pointeur de Cellule

    FStruct

    v a l e u r est le contenu de la cellule, (ici, un entier)

    s u i v a n t pointe vers la cellule suivante,

    ou vautN U L L

    (fin de liste).Le type de

    c e l l est rcursif (autorfrentiel).

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 10 / 36

    Listes simplement chanes Structure

  • 7/30/2019 Listes_Chainees

    11/62

    Listes simplement chanes Structure

    Reprsentation des listes - 2

    Implantation en C dune liste dentiers :structure de cellule pour reprsenter un lment.

    t y p e d e f s t r u c t {

    C e l l * n e x t ;

    i n t d a t a ;

    } C e l l ;

    d a t a est le contenu de la cellule, (ici, un entier)

    n e x t pointe vers la cellule suivante,ou vaut

    N U L L (fin de liste).

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 11 / 36

    Listes simplement chanes Structure

  • 7/30/2019 Listes_Chainees

    12/62

    Listes simplement chanes Structure

    Reprsentation des listes - 3

    Une liste est reprsente par un pointeur de tte C e l l *

    = pointeur sur la premire cellule.

    12 43 27 9

    head

    NULL

    Tous les lments sont accessibles depuis la tte de liste.

    Par convention,h e a d

    vautN U L L

    si la liste est vide.

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 12 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    13/62

    stes s p e e t c a es Op at o s

    Oprations sur les listes

    Structure de donnes = type + algorithmes de manipulation.On va dvelopper des fonctions pour les oprations suivantes :

    calcul de la longueur dune liste,

    recherche dun lment,insertion dun lment,

    suppression dun lment,

    concatnation de deux listes,

    destruction dune liste.

    Toutes nos fonctions prennent une tte de liste en argument.

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 13 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    14/62

    p p

    Calcul de la longueur dune liste - 1

    Principe : on suit les pointeurs n e x t jusqu rencontrer N U L L et on compte le nombre de cellules rencontres.

    12 43 27 9

    head

    NULL

    c 0i

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 14 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    15/62

    p p

    Calcul de la longueur dune liste - 1

    Principe : on suit les pointeurs n e x t jusqu rencontrer N U L L et on compte le nombre de cellules rencontres.

    12 43 27 9

    head

    NULL

    c i 1

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 14 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    16/62

    Calcul de la longueur dune liste - 1

    Principe : on suit les pointeurs n e x t jusqu rencontrer N U L L et on compte le nombre de cellules rencontres.

    12 43 27 9

    head

    NULL

    c i 2

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 14 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    17/62

    Calcul de la longueur dune liste - 1

    Principe : on suit les pointeurs n e x t jusqu rencontrer N U L L et on compte le nombre de cellules rencontres.

    12 43 27 9

    head

    NULL

    c i 3

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 14 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    18/62

    Calcul de la longueur dune liste - 1

    Principe : on suit les pointeurs n e x t jusqu rencontrer N U L L et on compte le nombre de cellules rencontres.

    12 43 27 9

    head

    NULL

    c iNULL 4

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 14 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    19/62

    Calcul de la longueur dune liste - 2

    crire la fonction en C (TP)

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 15 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    20/62

    Recherche dun lment

    Spcification : renvoiet r u e

    si la liste contient un lmentgal

    e l e m ,

    f a l s e sinon.

    Principe on suit les pointeursn e x t

    jusqu rencontrerN U L L

    ou llement.

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 16 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    21/62

    Rappels sur la mmoire dynamique

    Pour plus de flexibilit, les cellules sont alloues

    dynamiquement.

    # i n c l u d e < s t d l i b . h >

    v o i d * m a l l o c ( s i z e _ t s i z e ) ;

    v o i d f r e e ( v o i d * p t r ) ;

    Effet :

    m a l l o c alloue sur le tas un bloc de

    s i z e octets, renvoie un

    pointeur non typ vers la zone alloue. Faire un cast !

    f r e e libre le bloc,

    le bloc est accessible uniquement par pointeur.

    Allouer dynamiquement un tableau de 50 entiers ?

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 17 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    22/62

    Cration dune liste (exemple ne pas suivre)

    Pour construire/allouer la liste : (12, 43, 27, 9) :

    C e l l * h e a d ;

    h e a d = ( C e l l * ) m a l l o c ( s i z e o f ( C e l l ) ) ;

    h e a d - > d a t a = 1 2 ;

    h e a d - > n e x t = m a l l o c ( s i z e o f ( C e l l ) ) ;

    h e a d - > n e x t - > d a t a = 4 3 ;

    h e a d - > n e x t - > n e x t = m a l l o c ( s i z e o f ( C e l l ) ) ;

    h e a d - > n e x t - > n e x t - > d a t a = 2 7 ;

    h e a d - > n e x t - > n e x t - > n e x t = m a l l o c ( s i z e o f ( C e l l ) ) ;

    h e a d - > n e x t - > n e x t - > n e x t - > d a t a = 9 ;

    h e a d - > n e x t - > n e x t - > n e x t - > n e x t = N U L L ;

    Peu pratique. On prfre construire une liste par insertionssuccessives.

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 18 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    23/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    head

    NULL

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    24/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    9

    NULL

    h

    NULL

    c

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    25/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    9

    NULL

    head

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    26/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    27 9

    NULL

    c h

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    27/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    27 9

    NULL

    head

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    28/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    43 27 9

    NULL

    c h

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    29/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    43 27 9

    NULL

    head

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    30/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    c h

    12 43 27 9

    NULL

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    31/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    head

    12 43 27 9

    NULL

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    32/62

    Insertion en tte de liste - Principe

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    head

    12 43 27 9

    NULL

    Remarques :

    la liste est dans lordre inverse de celui desinsertions,

    i n s e r e fonctionne sur une liste vide ou non-vide,la tte de liste est modifie chaque insertion,

    le cot dune insertion est constant.

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 19 / 36

  • 7/30/2019 Listes_Chainees

    33/62

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    34/62

    Insertion en queue de liste

    Deux cas considrer :

    liste vide : on fait pointer la tte de liste sur la nouvellecellule,

    liste non vide : on fait pointer le champ n e x t de la dernirecellule sur la nouvelle cellule.

    liste vide liste non vide

    NULL

    head

    NULL

    head

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 21 / 36

    Listes simplement chanes Oprations

  • 7/30/2019 Listes_Chainees

    35/62

    Insertion en queue de liste

    Deux cas considrer :

    liste vide : on fait pointer la tte de liste sur la nouvellecellule,

    liste non vide : on fait pointer le champ n e x t de la dernirecellule sur la nouvelle cellule.

    liste vide liste non vide

    NULLNULL

    head

    NULL

    head

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 21 / 36

    Listes simplement chanes Oprations

    E l di i d li

  • 7/30/2019 Listes_Chainees

    36/62

    Exemple dinsertion en queue de liste

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    12

    head

    c

    NULL

    NULL

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 22 / 36

    Listes simplement chanes Oprations

    E l di ti d li t

  • 7/30/2019 Listes_Chainees

    37/62

    Exemple dinsertion en queue de liste

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    12

    head

    43

    NULL

    l

    c

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 22 / 36

  • 7/30/2019 Listes_Chainees

    38/62

    Listes simplement chanes Oprations

    E m l di ti d li t

  • 7/30/2019 Listes_Chainees

    39/62

    Exemple dinsertion en queue de liste

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    12 9

    NULL

    head c

    2743

    l

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 22 / 36

    Listes simplement chanes Oprations

    Exemple dinsertion en queue de liste

  • 7/30/2019 Listes_Chainees

    40/62

    Exemple d insertion en queue de liste

    C e l l * h e a d = N U L L ;

    h e a d = i n s e r e ( h e a d , 1 2 ) ;

    h e a d = i n s e r e ( h e a d , 4 3 ) ;

    h e a d = i n s e r e ( h e a d , 2 7 ) ;

    h e a d = i n s e r e ( h e a d , 9 ) ;

    12 9

    NULL

    head c

    2743

    l

    Remarques :

    la liste est dans le mme ordre que celui des

    insertions,la tte de liste nest modifie que lors de la premireinsertion,

    le cot dune insertion est linaire, O(n)

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 22 / 36

  • 7/30/2019 Listes_Chainees

    41/62

    Listes simplement chanes Oprations

    Cot de construction dune liste

  • 7/30/2019 Listes_Chainees

    42/62

    Cot de construction d une liste

    Pour construire une liste n lments :

    Par ajout en tte de liste : O(n

    )mais ordre inverse !

    par ajout en queue de liste : O(n2)

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 24 / 36

    Listes simplement chanes Oprations

    Insertion aprs un lment 1

  • 7/30/2019 Listes_Chainees

    43/62

    Insertion aprs un lment - 1

    Spcification :Insre un lment dans une liste , laide dun pointeurvers la cellule prcdente.

    pred

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 25 / 36

    Listes simplement chanes Oprations

    Insertion aprs un lment - 1

  • 7/30/2019 Listes_Chainees

    44/62

    Insertion aprs un lment - 1

    Spcification :Insre un lment dans une liste , laide dun pointeurvers la cellule prcdente.

    elem

    c

    pred

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 25 / 36

    Listes simplement chanes Oprations

    Insertion aprs un lment - 1

  • 7/30/2019 Listes_Chainees

    45/62

    Insertion aprs un lment - 1

    Spcification :Insre un lment dans une liste , laide dun pointeurvers la cellule prcdente.

    elem

    c

    pred

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 25 / 36

    Listes simplement chanes Oprations

    Insertion aprs un lment - 1

  • 7/30/2019 Listes_Chainees

    46/62

    Insertion aprs un lment 1

    Spcification :Insre un lment dans une liste , laide dun pointeurvers la cellule prcdente.

    elem

    c

    pred

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 25 / 36

    Listes simplement chanes Oprations

    Insertion aprs un lment - 1

  • 7/30/2019 Listes_Chainees

    47/62

    Insertion aprs un lment 1

    Spcification :Insre un lment dans une liste , laide dun pointeurvers la cellule prcdente.

    Notes :

    cot constant, hors calcul dep r e d

    ,

    p r e d peut tre obtenu par une variante de

    r e c h e r c h e

    (par exemple si on cherche insrer dans une listetrie) cf TP,

    on suppose quon ninsre pas en premire position.( on suppose que la liste nest pas vide)

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 25 / 36

    Listes simplement chanes Oprations

    Insertion aprs un lment - 2

  • 7/30/2019 Listes_Chainees

    48/62

    Insertion aprs un lment 2

    Linsertion avant une cellule donne est plus complexe...

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 26 / 36

    Listes simplement chanes Oprations

    Suppression dun lment - 1

  • 7/30/2019 Listes_Chainees

    49/62

    Suppression d un lment 1

    Spcification :Supprime une cellule de la liste , laide dun pointeurvers la cellule prcdente.

    pred c

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 27 / 36

    Listes simplement chanes Oprations

    Suppression dun lment - 1

  • 7/30/2019 Listes_Chainees

    50/62

    Suppression d un lment 1

    Spcification :Supprime une cellule de la liste , laide dun pointeurvers la cellule prcdente.

    pred c

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 27 / 36

    Listes simplement chanes Oprations

    Suppression dun lment - 1

  • 7/30/2019 Listes_Chainees

    51/62

    pp

    Spcification :Supprime une cellule de la liste , laide dun pointeurvers la cellule prcdente.

    pred

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 27 / 36

    Listes simplement chanes Oprations

    Suppression dun lment - 1

  • 7/30/2019 Listes_Chainees

    52/62

    pp

    Spcification :Supprime une cellule de la liste , laide dun pointeurvers la cellule prcdente.

    Notes :

    cot constant, hors calcul dep r e d

    ,

    on suppose quon ne dtruit pas en premire position,( on suppose que la liste nest pas vide)

    on suppose quep r e d

    a un suivant,(p r e d - > n e x t =N U L L )(on peut par contre avoir

    c - > n e x t = N U L L ).

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 27 / 36

    Listes simplement chanes Oprations

    Suppression dun lment - 2

  • 7/30/2019 Listes_Chainees

    53/62

    pp

    Il reste faire la version suppression complte .

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 28 / 36

    Listes simplement chanes Oprations

    Suppression dun lment - 3

  • 7/30/2019 Listes_Chainees

    54/62

    pp

    Spcification :supprime le premier lment gal

    e l e m dans la liste si il existe.

    calcule automatiquementp r e d

    ,gre les cas limites :

    liste vide, liste un seul lment,e l e m en tte ou en fin de liste,e l e m non prsent dans la liste,

    la tte de liste peut changer,

    cot linaire au pire, cause de la recherche dep r e d

    .

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 29 / 36

    Listes simplement chanes Oprations

    Suppression dun lment - 4

  • 7/30/2019 Listes_Chainees

    55/62

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 30 / 36

    Listes simplement chanes Oprations

    Concatnation de listes

  • 7/30/2019 Listes_Chainees

    56/62

    1212 43 27

    head1

    NULL

    head2

    27

    NULL

    c

    Cf TD.

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 31 / 36

  • 7/30/2019 Listes_Chainees

    57/62

    Listes simplement chanes Oprations

    Destruction totale dune liste

  • 7/30/2019 Listes_Chainees

    58/62

    Directement en C :

    v o i d d e t r u i t ( C e l l * h e a d )

    {

    C e l l * c ;

    w h i l e ( h e a d ) {

    c = h e a d - > n e x t ;

    f r e e ( h e a d ) ;

    h e a d = c ;

    }

    }

    Cot?

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 32 / 36

    Divers sur les listes chanes

  • 7/30/2019 Listes_Chainees

    59/62

    1 Introduction

    2 Listes simplement chanes

    3 Divers sur les listes chanes

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 33 / 36

    Divers sur les listes chanes

    Erreurs courantes sur les listes

  • 7/30/2019 Listes_Chainees

    60/62

    Erreurs courantes sur les pointeurs et la mmoiredynamique :

    drfrencer un pointeur N U L L ,utiliser un bloc aprs lavoir libr,librer deux fois le mme bloc,oublier de librer un bloc (fuites de mmoire).

    Introduction de cycles :

    (gnre des boucles infinies lors des parcours,cause des fuites de mmoire, . . . )

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 34 / 36

    Divers sur les listes chanes

    Erreurs courantes sur les listes

  • 7/30/2019 Listes_Chainees

    61/62

    Partage de cellules entre plusieurs listes :

    (effets de bord lors de la modification dune liste,cause des librations multiples de blocs, . . . )

    Oubli des cas limites :liste vide, listes un lment,insertion/suppression en premire/dernire position,etc.

    Laure Gonnord (Lille1/Polytech) Structures de donnes IMA S6 Listes Chanes Fvrier 2011 35 / 36

  • 7/30/2019 Listes_Chainees

    62/62