GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

Module Systèmes d’exploitation
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
GEF 243B Programmation informatique appliquée
Chap. 4 Recherche en Table
Rappels C.
GEF 243B Programmation informatique appliquée Boucles §
GEF 243B Programmation Informatique Appliquée
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Tests.
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Structures §12.3.
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Architecture du logiciel II.
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Modélisation II.
GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1.
GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Flot de contrôle et énoncés de sélection §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Modules et masquage dinformation.
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
C.
Structures et unions types énumérés Qu'est-ce qu'une structure
Chap. 1 Structures séquentielles : listes linéaires
FLSI602 Génie Informatique et Réseaux
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Récursivité.
II. Chaînage, SDD séquentielles
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
TRAITEMENT DE STRUCTURES
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT-2000: Structures de données
Présentation Structures de Données et TDA
Les listes chaînées par Frédérick Henri.
Points importants de la semaine Les allocations programmées de mémoire. Les enregistrements.
Points importants de la semaine La représentation cachée. Les enregistrements.
1.1 LES VECTEURS GÉOMÉTRIQUES
8PRO100 Éléments de programmation Les types composés.
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Les Types de données complexes
Structures des données
Le langage C Structures de données
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Université Mohammed V-Agdal École Supérieure de Technologie Salé
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Structures de données élémentaires dans le contexte du TP #1
ETNA – 1ème année Guillaume Belmas –
Les types composés Les enregistrements.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Transcription de la présentation:

GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2

24-Dec-13 2 JGA Beaulieu Revue Comment est-ce que lon accède au champs dune structure? Si jai un pointeur vers une structure quel opérateur est-ce que jutilise pour déréférencer et avoir accès au champs en même temps?

24-Dec-13 3 JGA Beaulieu Synopsis Tableaux de structures Pointeurs dedans une structure Listes chaînées (Linked lists) Tête de la liste Nœuds Exemple dune liste chaînée

24-Dec-13 4 JGA Beaulieu Tableaux de structures Quand nous avons créé des structures de type définit ( typedef struct {…} NOM_DU_TYPE; ) nous avons créé de nouveaux types complexes qui sont vraiment expressifs Nous nous sommes aussi donnés la capacité de créer des types dérivés à partir de ces types complexes Nous pouvons maintenant avoir des tableaux de structures: NOM_DU_TYPE nomDuTableau[X];

24-Dec-13 5 JGA Beaulieu Tableaux de structures Par exemple: typedef struct { char prenom[15]; char surnom[25]; unsigned long numeroDeCollege; float moyenne; } ETUDIANT; //Nom du type ETUDIANT etudiants[20]; //tableau //détudiants

24-Dec-13 6 JGA Beaulieu Tableaux de structures Les tableaux de structures sont des structures qui sont puissantes pour stocker des quantités connues de données complexes qui ne changent pas souvent mais consultées souvent Cependant les tableaux de structures ont des limitations Vous devez savoir la quantité des éléments pour votre tableau avant le temps de compilation – pas flexible Ou utiliser des tableaux qui sont larges pour contenir un maximum déléments – perte despace excessive Si vous avez à effacer des éléments, vous devez décider si vous laissez un trou ou si vous compactez le tableau Si vous voulez insérer un élément dans un tableau dans un ordre quelconque (alpha par surnom) vous devez déplacer des éléments – pas vraiment efficace pour les tableaux qui sont larges.

24-Dec-13 7 JGA Beaulieu Tableaux de structures Effacer un élément dans un tableau: Insérer un élément dans un tableau:

24-Dec-13 8 JGA Beaulieu Pointeurs dans une structure Pour résoudre le manque defficacité de lutilisation des tableaux pour entreposer des structures, nous faisons appel aux pointeurs Chaque structure que nous définissons peut contenir des champs qui sont de différents types; ceci inclus des variables de types pointeurs

24-Dec-13 9 JGA Beaulieu Pointeurs dans une structure Par exemple, si vous vouliez stocker le nom dun partenaire de labo en dedans de la structure ETUDIANT, nous pourrions ajouter deux nouveaux champs: typedef struct { char prenom[15]; char surnom[25]; unsigned long numeroDeCollege; float moyenne; char prenomLabPart[15]; char surnomLabPart[25]; } ETUDIANT; //nom du type

24-Dec JGA Beaulieu Pointeurs dans une structure Le dernier exemple requiert 40 octets de plus pour chaque structure. Une façon plus efficace davoir la même information serait de prendre un pointeur qui pointe au partenaire de labo. (4 octets au lieu de 40!): typedef struct TAG_ETUDIANT { char prenom[15]; char surnom[25]; unsigned long numeroDeCollege; float moyenne; struct TAG_ETUDIANT* partDeLabo; } ETUDIANT; //nom du type

24-Dec JGA Beaulieu Pointeurs dans une structure SpongeBobSquarePants PatrickStarfish

24-Dec JGA Beaulieu Listes chaînées Donc nous pouvons pointer à une autre variable de type structure …et lier les deux structures ensemble. Nous pouvons alors organiser nos données avec un autre genre de structure de données Au lieu de se servir des tableaux de structures, nous pourrions utiliser des pointeurs pour lier toutes les autres structures de même type ensemble Cette nouvelle structure est une liste chaînée Les éléments dans une liste chaînée sappellent des noeuds

24-Dec JGA Beaulieu Listes chaînées – nœuds Chaque nœud dans une liste chaînée contient deux composantes majeurs: Les données – i.e. information de létudiant Le lien – un pointeur au prochain nœud dans la liste Une liste chaînée est donc une chaîne de structures ordonnées et du même type

24-Dec JGA Beaulieu Listes chaînées – tête Les listes chaînées sont des structures dynamiques qui grandissent et rapetissent à nos besoins. Nous pouvons ainsi utiliser les fonctions malloc et free pour grandir et rapetisser nos chaînes de structures. Comme nous lavons vue dans le cours sur lallocation de la mémoire dynamique, les blocs de mémoire nont pas de nom symbolique (comme les variables) qui leurs sont attachés. Nous devons donc déclarer un pointeur qui tiens la tête (début) de la liste chaînée.

24-Dec JGA Beaulieu Listes chaînées - exemple Je peut maintenant déclarer un nœud de structure pour ETUDIANT de cette façon: typedef struct TAG_NOEUD_ETUDIANT { char prenom[15]; char surnom[25]; unsigned long numeroDeCollege; float moyenne; struct TAG_NOEUD_ETUDIANT* pProchainNoeud; } NOEUD_ETUDIANT; //nom du type

24-Dec JGA Beaulieu Listes chaînées – exemple crée un noeud La tête de ma liste chaînée est un pointeur de type NOEUD_ETUDIANT: NOEUD_ETUDIANT* pListeEtudiants = NULL; Je peut maintenant ajouter mon premier étudiant dans la liste: pListeEtudiants = (NOEUD_ETUDIANT*)malloc(sizeof(NOEUD_ETUDIANT)); strcpy(pListeEtudiants->prenom,"SpongeBob"); strcpy(pListeEtudiants->surnom,"SquarePants"); pListeEtudiants->numeroDeCollege = 21345; pListeEtudiants->moyenne = 74.2; pListeEtudiants->pProchainNoeud = NULL; //le prochain //nœud existe pas

24-Dec JGA Beaulieu Listes chaînées – exemple crée un noeud SpongeBobSquarePants NULL pListeEtudiants

24-Dec JGA Beaulieu Listes chaînées – exemple ajoute un noeud Je peut ensuite créer un nouvel étudiant dans la liste après SpongeBob : NOEUD_ETUDIANT* pNouvelEtudiant = NULL; //dans la sect déclaration … pNouvelEtudiant = (NOEUD_ETUDIANT*)malloc(sizeof(NOEUD_ETUDIANT)); strcpy(pNouvelEtudiant->prenom,"Patrick"); strcpy(pNouvelEtudiant->surnom,"Starfish"); pNouvelEtudiant->numeroDeCollege = 22348; pNouvelEtudiant->moyenne = 78.1; pNouvelEtudiant->pProchainNoeud = NULL; //Maintenant on lie le premier nœud au deuxième //Fleche rouge sur la prochaine diapositive pListeEtudiants->pProchainNoeud = pNouvelEtudiant;

24-Dec JGA Beaulieu Listes chaînées – exemple ajoute un noeud SpongeBobSquarePants pListeEtudiants PatrickStarfish NULL 49010

24-Dec JGA Beaulieu Quiz Time Pourquoi est-ce que les tableaux de structures ne sont pas efficace? Pourquoi est-ce que nous avons une tête sur une liste chaînée?