Structures de données élémentaires dans le contexte du TP #1

Slides:



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

Cours de C – Séance dexercices 12 Octobre Exercice 5 Idem quexercice 1 : lire une ligne au clavier Sans limitation de la longueur de la ligne (utilisez.
Rappels C.
Cours n° 7 Standard Template Library II.
GEF 243B Programmation informatique appliquée Structures §12.3.
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Algorithme et structure de données
Chap. 1 Structures séquentielles : listes linéaires
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
ALGORITHMES RECURSIFS
UE NFA006 STRUCTURES DE DONNEES
Structures de données linéaires
Cours d’Algorithmique
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
Types de données et représentation
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
RECURSIVITE ARBRES BINAIRES
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
II. Chaînage, SDD séquentielles
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
TRAITEMENT DE STRUCTURES
Les fichiers et les chaînes de caractères
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
IFT-2000: Structures de données
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Les listes chaînées par Frédérick Henri.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.

Structures de données IFT-2000
Structures de données IFT-10541
LES ARBRES Un arbre est une structure homogène dont chaque élément,
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Plan cours La notion de pointeur et d’adresse mémoire.
L’essentiel du langage C
Structures des données
Le langage C Structures de données
2.1 - Historique Chapitre 2 : Introduction au langage C++
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é
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
Les types.
8PRO107 Éléments de programmation Les chaînes de caractères.
Notions avancées du C++
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.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
Arbres binaires et tables de hachage
ETNA – 1ème année Guillaume Belmas –
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
8PRO100 Éléments de programmation Les pointeurs de caractères.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Tutorat en bio-informatique Le 15 novembre Exercices 1 et 2 (MAT1400) - solutions Chapitre 12.2, Analyse - concepts et contextes vol. 2 19) Calculez.
Structures de données élémentaires
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
CSI2510 Structures des Données et Algorithmes
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
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.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Transcription de la présentation:

Structures de données élémentaires dans le contexte du TP #1

Liste chaînée (Linked List) La liste chaînée permet d’insérer un élément dans une liste ordonnée d’éléments. L’ajout peut se faire n’importe où. On peut retirer n’importe lequel des éléments de la liste à tout moment.

Liste chaînée (suite) et utilisation dans le TP #1 A roger SIF1015 A ben SIF1015 A joe SIF1015 L 1-10 T joe SIF1015 Le tp1 requiert-il de la concurrence T ben SIF1015 Oui! Puisque l'accès a la liste chainée est concurrent T roger SIF1015 C'est surtout que chaque transaction est threadée A max SIF1053 A kim SIF1053 T kim SIF1053 L'énonce du tp1 est-il sur le site ftp? T max SIF1053 Non pas encore E joe SIF1015 A jim SIF1015 M 2 tiben SIF1015

Liste chaînée (suite) Initialisation des pointeurs de tête et queue de la liste chaînée head queue NULL

Liste chaînée (suite) Ajout d’un membre d’un groupe de discussion dans la liste chaînée queue head 1 roger SIF1015

Liste chaînée (suite) Ajout d’un second membre d’un groupe de discussion dans la liste chaînée head queue 1 2 ben SIF1015 roger SIF1015

Liste chaînée (suite) Ajout d’un troisième membre d’un groupe de discussion dans la liste chaînée queue head 1 2 3 ben SIF1015 roger SIF1015 joe SIF1015

Liste chaînée (suite) Ajout d’un autre membre d’un groupe de discussion dans la liste chaînée head queue 1 2 3 4 ben SIF1015 max SIF1053 roger SIF1015 joe SIF1015

Liste chaînée (suite) Ajout d’un autre membre d’un groupe de discussion dans la liste chaînée head 1 2 3 4 ben SIF1015 max SIF1053 joe SIF1015 roger SIF1015 queue 5 kim SIF1053

Liste chaînée (suite) Effacement du noeud 2 dans la liste chaînée ben head 1 2 2 3 ben SIF1015 max SIF1053 joe SIF1015 roger SIF1015 queue 4 kim SIF1053

Liste chaînée en code struct noeud { struct infoMembre membre; struct noeud *suivant; }; struct infoMembre { char ptrNick[100]; char ptrGroupe[100]; } ;

Liste chaînée en code struct noeud * findPrevCHAT(const char* ptrNick, const char* ptrGroupe){ if ((head==NULL)&&(queue==NULL)) return NULL; // liste vide struct noeud * ptr = head; //Tant qu'un item suivant dans la liste while (ptr->suivant!=NULL){ //Est-ce le predecesseur de l'item recherche? if((strcmp(ptr->suivant->membre.ptrNick,ptrNick) == 0) && (strcmp(ptr- >suivant->membre.ptrGroupe,ptrGroupe) == 0) ){ return ptr; //On retourne un pointeur sur l'item precedent } ptr=ptr->suivant; return NULL; //On retourne un pointeur NULL item non trouve

Liste chaînée en code void addItemCHAT(const char* ptrNick, const char* ptrGroupe){ //Creation de l'enregistrement en memoire struct noeud* ni = (struct noeud*)malloc(sizeof(struct noeud)); //Affectation des valeurs des champs strcpy(ni->membre.ptrNick, ptrNick); strcpy(ni->membre.ptrGroupe, ptrGroupe); if(head == NULL){ // ajout au debut de la liste vide // premier noeud ni->suivant= NULL; queue = head = ni; } else { // ajout a la fin de la liste struct noeud* tptr = queue; queue = ni; tptr->suivant = ni;

Liste chaînée en code void removeItemCHAT(const char* ptrNick, const char* ptrGroupe){ struct noeud * ptr, optr; if ((head==NULL)&&(queue==NULL)) // Voir si la liste est vide return; if((strcmp(head->membre.ptrNick,ptrNick) == 0) && (strcmp(head->membre.ptrGroupe,ptrGroupe) == 0) ){ ptr = head; // suppression du premier element de la liste } else{ ptr = findPrevCHAT(ptrNick,ptrGroupe); // Selection de l’element precedent if (ptr!=NULL){ // element trouve if(head == ptr){ // suppression de l'element de tete if(head==queue){ // un seul element dans la liste free(ptr); // Suppression du seul element de la liste queue = head = NULL; head = ptr->suivant; free(ptr);

Liste chaînée en code (suite …) else if (queue==ptr->suivant){ // suppression de l'element de queue queue=ptr; free(ptr->suivant); ptr->suivant=NULL; return; } else{ // suppression d'un element dans la liste { optr = ptr->suivant; // Pointeur sur l’element a supprimer ptr->suivant = ptr->suivant->suivant; // Brancher l’element precedent // a l’element suivant free(optr);

Liste chaînée en code void modifyItemCHAT(const int noNickGroupe, const char* ptrNick, const char* ptrGroupe){ int noentree=1; // Verification sommaire (no>0 et liste non vide) if ((noNickGroupe<1)||((head==NULL)&&(queue==NULL))) return; //Recherche de l'element a  modifier struct noeud * ptr = head; //premier element while (ptr!=NULL){ //Element a modifier if (noentree==noNickGroupe){ strcpy(ptr->membre.ptrNick, ptrNick); //Affectation des valeurs des champs strcpy(ptr->membre.ptrGroupe, ptrGroupe); printf("%d: %s \t\t %s\n",noentree, ptr->membre.ptrNick, ptr->membre.ptrGroupe); } else{ ptr = ptr->suivant; noentree++;

Application gestionCHAT séquentielle

Fichier gestionCHAT_MAIN.c

Fichier gestionCHAT.c (Fonction readTransCHAT())

Fichier gestionCHAT.c (Fonction readTransCHAT())

Fichier gestionCHAT.c (Fonction readTransCHAT())

Exécution du fichier gestionCHAT_MAIN Ajout de 3 membres au groupe SIF1015 Transmission d’un message au groupe SIF1015 Transmission d’un message au groupe SIF1015

Exécution du fichier gestionCHAT_MAIN Transmission d’un message au groupe SIF1015 Transmission d’un message au groupe SIF1053 Ajout de 2 membres au groupe SIF1053 Transmission d’un message au groupe SIF1053

Exécution du fichier gestionCHAT_MAIN Suppression de joe Ajout de jim

Exécution du fichier gestionCHAT_MAIN Modification du nick de ben