La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Structures de données élémentaires dans le contexte du TP #1"— Transcription de la présentation:

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

2 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.

3 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

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

5 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

6 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

7 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

8 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

9 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

10 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

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

12 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

13 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;

14 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);

15 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);

16 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++;

17 Application gestionCHAT séquentielle

18 Fichier gestionCHAT_MAIN.c

19 Fichier gestionCHAT.c (Fonction readTransCHAT())

20 Fichier gestionCHAT.c (Fonction readTransCHAT())

21 Fichier gestionCHAT.c (Fonction readTransCHAT())

22 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

23 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

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

25 Exécution du fichier gestionCHAT_MAIN
Modification du nick de ben


Télécharger ppt "Structures de données élémentaires dans le contexte du TP #1"

Présentations similaires


Annonces Google