Liste: pile et queue en C - Applications résolues
1) Ecrire un type structure pour representation d’une liste enchaînée,
intermédiaire duquel ils détiennent des valeurs de texte pour afficher un message.
La liste contiendra 3 elements.
#include<stdio.h> #include<conio.h> #include<stdlib.h> //ecrire une structure pour representer un noeud (element) de la liste struct nod_lista{ char* inf; nod_lista* next; }; /*construire un type propre poufr representer un noeud de liste sur la base de la structure précédemment définie*/ typedef struct nod_lista nod; //fonction principale en execution void main() { nod* a; //premier element de la liste a=(nod*)malloc(sizeof(nod)); a->inf="Bonjour"; //contenu du premier element nod* b; //deuxieme element de la liste b=(nod*)malloc(sizeof(nod)); a->next=b; //suivant element du premier b->inf="langage"; nod* c; //troixieme element de la liste c=(nod*)malloc(sizeof(nod)); b->next=c; c->inf="C/C++!"; c->next=NULL; //sau c->next=0; while(a) //a!=NULL sau a!=0 { printf("%s ",a->inf); a=a->next; } getch(); }
2) Ecrire un type structure pour repreasenter une liste enchainee,
Et par son intermede retenir des valeurs textuels pour afficher un message.
Toute la reference de la liste soit faite avec un seul element.
#include<stdio.h> #include<conio.h> #include<stdlib.h> //ecrire une structure pour representer un noeud (element) de la liste struct nod_lista{ char* inf; nod_lista* next; };/*modifier une valeur de la liste (si cette valeur a se trouve plusieurs fois, on va modifier la premiere)*/ typedef struct nod_lista nod; //fonction principale en execution void main() { nod* a; //premier element de la liste a=(nod*)malloc(sizeof(nod)); a->inf="Bonjour"; //contenu du premier element a->next=(nod*)malloc(sizeof(nod)); a->next->inf="langage"; //suivant element du premier a->next->next=(nod*)malloc(sizeof(nod)); a->next->next->inf="C/C++!"; a->next->next->next=NULL; while(a) //a!=NULL sau a!=0 { printf("%s ",a->inf); a=a->next; } getch(); }
3) Ecrire un programme pour determiner les principales operations sur une liste enchainee (asimetrique) qui contient des nombres entiers.
On va cdevelopper les suivantes operations:
- generation (initialisation) d’une liste
- longueur (nombre des elements) d’une liste
- ajouter un element dans une liste
- devant la liste
- derriere la liste
- apres un element donné
- modifier la valeur d’un element de la liste
- effacer un element de la liste:
- effacer le premier element
- effacer le dernier element
- effacer un certain element
- afficher la liste
- detruire (dealocation) la liste.
- generation (initialisation) d’une liste
- longueur (nombre des elements) d’une liste
- ajouter un element dans une liste
- devant la liste
- derriere la liste
- apres un element donné
- modifier la valeur d’un element de la liste
- effacer un element de la liste:
- effacer le premier element
- effacer le dernier element
- effacer un certain element
- afficher la liste
- detruire (dealocation) la liste.
#include<stdio.h> #include<conio.h> #include<stdlib.h> //definir un type structure pour representer un noeud de la liste typedef struct nod{ int val; nod *next; }nod; //initialisation (generer) d’une liste nod* init(nod *cap); //longueur – nombre des elements de la liste int lung(nod *cap); //ajouter un element devant une liste nod* adFata(nod *cap, int inf); //ajouter un element derriere une liste nod* adSpate(nod *cap, int inf); //ajouter un element sur une certaine position de la liste nod* adInterior(nod *cap,int valpoz, int valnou); /*modifier une valeur de la liste (si cette valeur a se trouve plusieurs fois, on va modifier la premiere) */ nod* modify(nod *cap, int valvechi, int valnou); //effacer un element devant la liste nod* stergeFata(nod *cap); //effacer un certain element de la liste nod* stergeVal(nod *cap, int inf); //effacer un element derriere la liste nod* stergeSpate(nod *cap); //afficher les components de la liste void afisList(nod *cap); //destruction (dealocation) de la liste void destroy(nod *cap); //initialiser (generer) une liste nod* init(nod *cap) { cap=NULL; return cap; } //longueur – nombre des elements de la liste int lung(nod *cap) { nod *aux; //element de parcourrir la liste int nr=0; aux=cap; while(aux!=NULL) { nr++; aux=aux->next; } return nr; } //ajouter un element devant la liste nod* adFata(nod *cap, int inf) //inf – une valeur numerique qui sera introduite { nod *temp; //element auxiliaire dans lequel on fera l’ajout initiel temp=(nod*)malloc(sizeof(nod)); temp->val=inf; //on peuple l’element de valeur dans la liste, puis celui de liaison //on va tester s’il y a encore des elements dans la liste if (cap==NULL) //situation quand la liste est vide { temp->next=NULL; cap=temp; } else //quand il y a encore des elements dans la liste { temp->next=cap; cap=temp; } return cap; } //ajouter un element derriere la liste nod* adSpate(nod *cap, int inf) { nod *temp, *aux; //aux – on utilise pour parcourir la liste temp=(nod*)malloc(sizeof(nod)); temp->val=inf; //tester s’il y a encore des elements dans la liste if (cap==NULL) //si la liste est vide { temp->next=NULL; cap=temp; } else //s’il y a encore des elements dans la liste { aux=cap; while(aux->next!=NULL) aux=aux->next; aux->next=temp; temp->next=NULL; } return cap; } //ajouter un element sur une certaine position de la liste nod* adInterior(nod *cap, int valpoz, int valnou) { nod *temp, *aux; temp=(nod*)malloc(sizeof(nod)); temp->val=valnou; if (cap==NULL) { temp->next=NULL; cap=temp; } else { aux=cap; while((aux->next!=NULL)&&(aux->val!=valpoz)) aux=aux->next; if(aux->val==valpoz) { temp->next=aux->next; aux->next=temp; } else printf("\nLa valeur %d ne se trouve pas dans la liste\n", valpoz); } return cap; } /*modifier une valeur de la liste (si la valeur se retrouve plusieurs fois, on modifie la premiere)*/ nod* modify(nod *cap, int valvechi, int valnou) { nod *aux; aux=cap; while((aux!=NULL)&&(aux->val!=valvechi)) aux=aux->next; if(aux!=NULL) aux->val=valnou; return cap; } //effacer un element devant la liste nod* stergeFata(nod *cap) { nod *temp; if (cap==NULL) printf("\nListe vide\n"); else { temp=cap; cap=cap->next; free(temp); } return cap; } //effacer un element derriere la liste nod* stergeSpate(nod *cap) { nod *temp,*aux; if (cap==NULL) printf("\nListe vide\n"); else if (cap->next==NULL) { free(cap); } else { temp=cap; aux=temp->next; while(aux->next!=NULL) { aux=aux->next; temp=temp->next; } temp->next=NULL; free(aux); } return cap; } //effacer un certain element de la liste nod* stergeVal(nod *cap, int inf) { nod *temp, *aux; if (cap==NULL) printf("\nListe vide\n"); else if(cap->val==inf) { temp=cap; cap=cap->next; free(temp); } else if(cap->next==NULL) printf("\nLa valeur pour effacer ne se trouve pas dans la liste\n"); else { temp=cap; aux=temp->next; while((aux!=NULL)&&(aux->val!=inf)) { aux=aux->next; temp=temp->next; } if(aux!=NULL) { temp->next=aux->next; free(aux); } } return cap; } //afficher les components de la liste void afisList(nod *cap) { nod *aux; aux=cap; printf("Les elements de la liste sont: "); while (aux!=NULL) { printf("%d ", aux->val); aux=aux->next; } } //detruire (dealocation) la liste void destroy(nod *cap) { nod *temp; printf("\nDetruire la liste\n"); while(cap!=NULL) { temp=cap; cap=cap->next; free(temp); } } //fonction principale en execution void main() { nod *cap=NULL; int inf,poz; cap=init(cap); //initialisation de la liste //introduire les elements dans la liste printf("Introduire des nopeuds dans la liste. Finir avec zero: "); scanf("%d",&inf); while(inf!=0) //l’introduction va finir avec l’element "0" { cap=adSpate(cap,inf); //on ajoute par derriere scanf("%d",&inf); } afisList(cap); //affichage des components de la liste //ajouter des elements devant printf("\nIntroduir un element pour l’ajouter sur la premiere position: "); scanf("%d",&inf); cap=adFata(cap,inf); afisList(cap); //affichage des components de la liste //ajouter par l’interieur printf("\nIntroduire la valeur apres inserrer: "); scanf("%d",&poz); printf("Introduire un element pour l’ajouter apres la valeur %d: ",poz); scanf("%d",&inf); cap=adInterior(cap,poz,inf); afisList(cap); //affichage des components de la liste //modifier une valeur de la liste printf("\nIntroduire la valeur pour modifier: "); scanf("%d",&poz); printf("Introduire la nouvelle valeur: "); scanf("%d",&inf); cap=modify(cap,poz,inf); afisList(cap); //affichage des components de la liste //affacer le premier element de la liste printf("\n\nOn efface le premier element de la liste- "); cap=stergeFata(cap); afisList(cap); //affichage des components de la liste //effacer par derriere la liste printf("\nEffacer le dernier elem,ent de la liste- "); cap=stergeSpate(cap); afisList(cap); //effacer une valeur de la liste printf("\nIntroduire la valeur pour effacer: "); scanf("%d",&inf); cap=stergeVal(cap,inf); afisList(cap); //distrugerea (dealocarea) listei printf("\n\nDetruire la liste"); destroy(cap); getch(); }