Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parnoureddine moutassem Modifié depuis plus de 6 années
1
Les structures de base Listes chainées
2
Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire des données en respectant un certain ordre: on peut ajouter, enlever ou consulter un élément en début ou en fin de liste, vider une liste ou savoir si elle contient un ou plusieurs éléments.
3
Implémentation statique d’une liste ( tableau) La liste peut être implantée à l'aide d'un tableau. Dans ce cas, il faut prévoir une taille maximum pour le tableau
4
Implémentation dynamique d’une liste (liste chainée) Une liste chaînée étant une succession de maillons, dont le dernier pointe vers une adresse invalide (NULL); voici une représentation possible : STRUCTURE MAILLON { Element : type Suivant :^MAILLON /*Pointeur vers le maillon suivant */ }
5
Implémentation dynamique d’une liste (liste chainée) Une liste chaînée est caractérisée par un pointeur tete (ou premier) vers le premier élément et un pointeur queue (ou dernier) vers le dernier élément de la liste STRUCTURE LISTE { Tete : ^ MAILLON Queue: ^ MAILLON }
6
Fonctions utilisées dans les listes Initialisation Ajout d'un élément Suppression d'un élément Accès à l'élément suivant Accès aux données utilisateur Accès au premier élément de la liste Accès au dernier élément de la liste Calcul de la taille de la liste Suppression de la liste entière Remarque: Le principal problème des listes simplement chaînées est l'absence de pointeur sur l'élément précédent du maillon, il est donc possible de parcourir la chaîne uniquement du début vers la fin !
7
implémentation d'une liste chainée struct noeud{ int objet; struct noeud *suivant; }; typedef struct liste { struct noeud *tete; } Liste;
8
Initialisation d’une liste Initialisé une liste c’est l’opération de rendre une liste vide: void Initialiser (liste L){ L.tete=NULL; }
9
Ajout d'un élément (insertion) Il y a trois façon pour insérer un élément à une liste: 1- insertion à la tête de liste: liste ajouter (liste L, int element){ noeud* new_noeud=(noeud*) malloc(sizeof(noeud)); new_noeud->objet= element; new_noeud->suivant=L.tete; L.tete=new_noeud; return l; }
10
Insertion d’un élément 2- insérer nouveau élément à la fin de liste : Liste inserer ( liste L, int element ) { noeud* newNoeud =(noeud*) malloc(sizeof(noeud)); newNoeud->valeur=uneValeur; newNoeud->nexte=NULL; if (L==NULL) { return newNoeud; } else { noeud* temp =L; while(temp->nexte!=NULL) { temp=temp->nexte; temp->nexte=newNoeud; return L; }
11
Suppression d'un élément liste supprimer (liste l, int element) { if (liste_vide(l)) { cout<<"erreur"<<endl; return l; } else { noeud* tmp1=l.tete; noeud* tmp2=NULL; while ((tmp1->objet!= element)||(tmp1->suivant!=NULL)) { tmp2=tmp1; tmp1=tmp1->suivant; } if (tmp1->objet== element) { tmp2->suivant=tmp1>suivant; } return l; }
12
Tester si liste est vide ou nont bool liste_vide(liste L ){ if (L.tete==NULL) return true; else return false; }
13
Afficher le contenu de la liste void afficher (liste L){ if (L.tete==NULL) cout<<"pile vide"<<endl; else { noeud* tmp=L.tete; cout objet while (tmp->suivant!=NULL){ cout suivant)->objet<<endl; tmp=tmp->suivant; } }
14
compter le nombre des éléments de la liste int longeur (Liste L) { int i=0; noeud* temp =L; while(temp!=NULL) { i++; temp=temp->nexte; } return i; }
15
La recherche d’un élément dans la liste Liste recherche (Liste L, int e) { noeud* temp =L; while((temp!=NULL)&&(temp->valeur!=e)) { temp=temp->nexte; } return temp; } Remarque: la fonction retourne l’adresse de l’élément, null s'il n'existe pas.
16
Liste doublement chaînée: A la différence des listes simplement chaînées, les maillons d'une liste doublement chaînée possèdent un pointeur sur l'élément qui les précède :
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.