Représentation chainée d’une pile en C :
Cpile.h :
typedef int Element;
typedef struct cellule {Element valeur;
struct cellule *suivant;
} cellule;
typedef cellule *pile;
pile vide_pile ();
int pile_est_vide (pile p);
pile empiler (pile p, Element e);
pile depiler (pile p);
void afficher (pile p);
void menu ();
|
Cpile.cpp :
#include
<stdio.h>
#include
<stdlib.h>
#include
"Cpile.h"
int main()
{ menu();
system("pause");
return 0;
}
pile vide_pile(){
return NULL;}
int pile_est_vide (pile p) {if (p==NULL) return 1;//1vide
else return 0;//0non vide
}
pile empiler (pile p, Element e) {cellule *q= (cellule *) malloc
(sizeof (cellule));
q->valeur= e;
q->suivant= p;p=q;
return p; }
pile depiler (pile p) {if (p==NULL) printf ("erreur pile est
deja vide");
else {cellule *tempo=p;
p=p->suivant;
free(tempo);
return p; }
}
void afficher (pile
p) {cellule * tempo=p;
if
(p==NULL) {printf ("la pile est deja vide\n");exit (-1) ;}
else {
while (tempo!=NULL) {
printf ("%d\n", tempo->valeur);
tempo=tempo->suivant;
}
}
}
void menu () {
pile p;//=NULL;
p=vide_pile
();
int i=1;
int choix;
Element e;
printf ("\tmenu\n");
printf ("1 empiler\n");
printf ("2 depiler\n");
printf ("3 afficher\n");
do
{printf ("votre choix\n");
scanf ("%d", &choix);
printf
("\n");
switch(choix){
case 1: printf("entrez
l'element\n");
scanf("%d",&e);
p=empiler(p,e);
break;
case
2: p=depiler(p);break;
case
3: afficher(p);break;
default
: printf ("erreur choix introvable\n");break;
}
}
while (choix!=0) ;
}
|
·
pour mieux comprendre
voir les exemple
Capture
d’écran :
empiler:
depiler:
Représentation chainée d’une file en C :
Cfile.h :
typedef int elt_file;
typedef struct cellule{ elt_file valeur;
struct cellule *nxt;
} cellule;
typedef cellule *file;
file vide_file ();
int file_est_vide (file f);
file enfiler (file f, elt_file e);
file defiler (file f);
void afficher_file (file f);
void menu ();
|
Cfile.cpp :
#include
<stdio.h>
#include
<stdlib.h>
#include
"Cfile.h"
int main()
{menu();
system("pause");
return 0;
}
file
vide_file(){return NULL;}
int file_est_vide (file f) {if (f==NULL) return 1;//file vide
else return 0;//file non vide
}
file enfiler (file f, elt_file e) {
cellule
*nf=(cellule *)malloc(sizeof(cellule));
nf->valeur=
e;
nf->nxt= NULL;
if(file_est_vide(f))
return nf;
else{cellule
*tempo=f;
while(tempo->nxt!=NULL)
{tempo=tempo->nxt;}
tempo->nxt= nf;
return
f;
}
}
file defiler (file f) {if (file_est_vide(f)) {printf ("erreur
file vide\n");exit (-1) ;}
else{cellule *tempo=f;
f=f->nxt;
free(tempo);
return f;
}
}
void
afficher_file(file f)
{if
(file_est_vide(f)) {printf ("erreur file vide\n");}
else{cellule *tempo=f;
while (tempo!=NULL) {printf
("%d\n", tempo->valeur);
tempo=tempo->nxt;
}
}
}
void menu ()
{
file
f;
f=vide_file
();
int
i=1;
int
choix;
elt_file
e;
do
{printf("\tmenu\n");
printf("1 enfiler\n");
printf ("2 defiler\n");
printf ("3 afficher\n");
printf ("votre choix\n");
scanf ("%d", &choix);
printf
("\n");
switch(choix){ case 1: printf("entrez
l'element\n");
scanf("%d",&e);
f=enfiler(f,e);
break;
case 2: f=defiler(f);break;
case 3: afficher_file(f);break;
}
}
while(choix!=0);
}
|
Capture
d’écran :
exercice 2:
#include <stdio.h>
#include <stdlib.h>
#ifndef _file_chaine
#define _file_chaine
typedef int element;
typedef struct cellule
{
element valeur;
struct cellule *suivant;
}cellule ;
typedef struct
{
struct cellule *tete;
struct cellule *queue;
} file;
file file_vide();
int file_est_vide(file f);
file enfiler(file f,element e);
file defiler(file f);
element tete(file f);
void menu();
#endif
file file_vide()
{
file f;
f.tete = f.queue = NULL ;
return f;
}
int file_est_vide(file f)
{
if (f.tete == f.queue && f.queue == NULL ) return 1;
else return 0;
}
file enfiler(file f,element e)
{
cellule *c = malloc(sizeof(cellule));
c->valeur = e;
c->suivant = NULL;
if (file_est_vide(f)) f.tete = f.queue = c;
else
{
f.queue->suivant = c;
f.queue = f.queue->suivant;
}
return f;
}
file defiler(file f)
{
if(file_est_vide(f))
{
printf("la file est vide");
}
else
{
if(f.tete == f.queue)
f = file_vide();
else
{
cellule *p;
p = f.tete;
f.tete = f.tete->suivant;
free(p);
}
}
return f;
}
element tete(file f)
{
if(file_est_vide(f))
{
printf("la file est vide");
}
else return f.tete->valeur;
}
file permuter(file f)
{
element va ;
file q ;
if (!file_est_vide(f))
{ va= tete(f);
f=defiler(f);
if(file_est_vide(f))
{
f=enfiler(f,va);
return f;
}
q=file_vide();
while(f.tete!=f.queue)
{
q=enfiler(q,tete(f)) ;
f=defiler(f);
}
while (! file_est_vide(q))
{
f=enfiler(f,tete(q));
q=defiler(q);
}
f=enfiler(f,va);
return f;
}
}
void afficher(file f)
{
while((f.tete!=NULL) && (f.queue!=NULL))
{printf("%d\n",f.tete->valeur);
f.tete=f.tete->suivant;
}
}
void menu(file f)
{
int choix,x;
do
{ printf("----------------------\n");
printf("1-File vide\n");
printf("2-Enfiler\n");
printf("3-Defiler\n");
printf("4-Tete file\n");
printf("5-Afficher les elements de la file\n");
printf("6-Permuter les elements de la file\n");
printf("0-Terminer\n");
printf("Entrer votre choix :");
scanf("%d",&choix);
printf("\n\n");
switch(choix)
{
case 1: f=file_vide();
break;
case 2 : printf("donner element a enfiler:");
scanf("%d",&x);
f = enfiler(f,x);
break;
case 3 : if (!file_est_vide(f))f = defiler(f); break;
case 4: if (!file_est_vide(f)) printf("tete = %d \n",tete(f));break;
case 5: afficher(f);break;
case 6: f=permuter(f); break;
}
}while (choix !=0);
}
int main(int argc, char *argv[])
{ file f;
f.tete = malloc (sizeof(cellule));
f.queue = malloc (sizeof(cellule));
f=file_vide();
menu(f);
system("PAUSE");
return 0;
}
permuter pile
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#ifndef _pile_chaine
#define _pile_chaine
typedef int element;
typedef struct cellule
{
element valeur;
struct cellule *suivant;
} cellule;
typedef struct cellule *pile ;
pile pile_vide();
int pile_est_vide(pile p);
pile empiler(pile p,element e);
pile depiler(pile p);
element sommet(pile p);
void menu();
#endif
pile pile_vide()
{return NULL;
}
int pile_est_vide(pile p)
{if(p==NULL) return 1;
else return 0;
}
pile Empiler(pile p, element e)
{cellule *q=(cellule *)malloc(sizeof(cellule));
q->valeur=e;
q->suivant=p;
return q;
}
pile Depiler(pile p)
{cellule *q=p;
if (pile_est_vide(p)==1)
{printf("Erreur!!la pile est deja vide!!\n");
exit(-1);
}
p=p->suivant;
free(q);
return p;
}
element Sommet(pile p)
{if (pile_est_vide(p)==1)
{printf(" erreur pile est vide\n");
exit(-1);
}
return p->valeur;
}
pile Permuter (pile p)
{
element Va, Vb;
cellule *Pt=(cellule *)malloc(sizeof(cellule)); //pile Pt;
if(p==NULL)
{
printf("Pile déja vide !!! \n");
}
else{
Va=Sommet(p);
p=Depiler(p);
Pt=NULL;
while (p!=NULL)
{
Pt=Empiler(Pt,Sommet (p));
p=Depiler(p);
}
p=NULL;
Vb=Sommet(Pt);
Pt=Depiler(Pt);
p=Empiler(p,Va);
while (Pt!=NULL)
{
p=Empiler(p,Sommet(Pt));
Pt=Depiler(Pt);
}
p=Empiler(p,Vb);
return p;
}
}
void Afficher(pile p)
{ cellule *Pt=p;
/* while (Pile_est_Vide(P)!=0)
{printf(" %d \n",Sommet(Pt));
Pt=Depiler(Pt);
}*/
while(Pt!=NULL)
{ printf("%d \n",Pt->valeur);
Pt=Pt->suivant;
}
}
void menu (pile p)
{
int choix ,e;
do{
printf("---------------------- \n");
printf("\n");
printf("1: Permuter la pile \n");
printf("2: Afficher la pile \n");
printf("3: Empiler la pile \n");
printf("4: Depiler la pile \n");
printf("5: Afficher sommet\n");
printf("0: Quitter \n");
printf("Entrer votre choix svp :");
scanf("%d",&choix);
printf("\n");
switch (choix)
{
case 1 : p=Permuter(p);
break;
case 2: Afficher (p);
break;
case 3:do{
printf("Donner element a empiler (-1 pour sortir):");
scanf("%d",&e);
p= Empiler(p,e);}
while(e!=-1);
p=Depiler(p);
break;
case 4 : p=Depiler(p);
break;
case 5: printf("sommet= %d \n",Sommet(p));
break;
}
}while (choix!=0);
}
int main(int argc,char *argv[])
{
pile p=(cellule *)malloc(sizeof(cellule));
p=pile_vide();
menu(p);
system ("PAUSE");
return 0;
}
exercice3;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct empl {
int val;
struct empl *suivant;
struct empl *precedant;
char *nom;
int sal;
char *prenom;
int code;
}empl ;
typedef struct empl *liste;
liste liste_vide()
{
return NULL;
}
int liste_est_vide(liste l)
{
if(l==NULL)
return 1;
else
return 0;
}
int longueur (liste l)
{
int taille=0;
while (l!=NULL)
{
taille++;
l=l->suivant;
}
return taille ;
}
liste ajouter_debut(liste l,empl e)
{
liste c;
c=(liste)malloc(sizeof(empl));
c->code=e.code;
c->sal=e.sal;
strcpy(e.nom,c->nom);
strcpy(e.prenom,c->prenom);
c->suivant=l;
l=c;
return c;
}
liste ajouter_fin(liste l,int i,empl e)
{
if (i<0||i>longueur(l))
{
printf("Erreur :rang non valide !\n");
exit(-1) ;
}
liste pc=(liste)malloc(sizeof(empl));
pc->code=e.code;
pc->nom=e.nom;
pc->prenom=e.prenom;
pc->sal=e.sal;
pc->suivant=NULL;
if(i==0){
pc->suivant=l;
l=pc;
}
else {
int j;
liste pt=(liste)malloc(sizeof(empl));
pt=l;
for(j=0;j<i-1;j++){
pt=pt->suivant;
}
pt->suivant=pc;
}
return l;
/*liste c;
c=(liste)malloc(sizeof(empl));
c->code=e.code;
c->sal=e.sal;
strcpy(e.nom, c->nom);
strcpy(e.prenom, c->prenom);
c->suivant=NULL;
liste temp=l;
while(temp->suivant!=NULL)
{
temp=temp->suivant;
}
temp->suivant=c;
return l;*/
}
liste cree_liste(liste l)
{
empl v;
int i=0;
do{
printf("Donner le code : ");
scanf("%d",&v.code);
printf("Donner le nom : ");
v.nom=(char *)malloc(25*sizeof(char));
scanf("%s",v.nom);
if(strcmp(v.nom,"FIN")!=0)
{printf("Donner le prenom : ");
v.prenom=(char *)malloc(25*sizeof(char));
scanf("%s",v.prenom);
printf("Donner salaire : ");
scanf("%f",&v.sal);
l=ajouter_fin(l,i,v);
i++ ;
}
}while(strcmp(v.nom,"FIN")!=0);
return l;
/*empl e;
l=liste_vide();
do
{ printf("Donner code employe :");
scanf("%d",&e.code);
printf("Donner le salaire de l'employe :");
scanf("%f",&e.sal);
e.nom=(char *)malloc(20*sizeof(char));
e.prenom=(char *)malloc(50*sizeof(char));
printf("Nom de l'employe :");
scanf("%s",e.nom);
printf("Prenom de l'employe :");
scanf("%s",e.prenom);
if(strcmp(e.nom,"FIN")!=0)
{ l=ajouter_fin(l,e);
}}while(strcmp(e.nom,"FIN")!=0);
return l;*/
}
int rechercher(liste l,int c)
{
int a=0;
liste lis=l;
while((a==0)&&(!liste_est_vide(lis)))
{
if(lis->code==c)
a=1;
else
lis=lis->suivant;
}
return a;
}
liste supprimer(liste l,int c)
{
int a;
a=rechercher(l,c);
liste q=l;
if(a==1)
{
if(q->code==c)
{
l=q->suivant;
free(q);
}
}
else
{
while(!liste_est_vide(q->suivant)&&q->suivant->code!=c)
{ q=q->suivant; }
liste p=q->suivant;
if(!liste_est_vide(p->suivant))
{
q->suivant=p->suivant;
free(p);
}
else
{ q->suivant=NULL;
free(p);
}
}
return l;
}
float moyenne(liste l)
{
float s=0;
int m=0;
liste lis=l;
while(!liste_est_vide(lis))
{
s+=lis->suivant->sal;
m++;
lis=lis->suivant;
}
return (s/(float)(m));
}
void afficher(liste l)
{
liste lis=l;
float m=moyenne(l);
while(!liste_est_vide(lis))
{
if(lis->sal >m)
{
printf(" nom: %s \n ",lis->nom);
printf("prenom : %s \n",lis->prenom);
printf("code: %d \n", lis->code);
printf("salaire : %f \n",lis->sal);
}
lis=lis->suivant;
}
}
int verifie(liste l)
{int j=1;
liste q=l;
while (!liste_est_vide(q->suivant)&&j==1)
{
if (q->sal > q->suivant->sal)
j=0;
else
q=q->suivant;
}
return j;
}
liste tri_liste(liste l)
{
int ech;
empl E;
liste q;
if(liste_est_vide(l))
{printf("Liste vide");}
else
{
do
{
ech=0;
for(q=l;q->suivant!=NULL;q=q->suivant)
{
if(q->sal > q->suivant->sal)
{E.code=q->code;
E.sal=q->sal;
strcpy(E.nom,q->nom);
strcpy(E.prenom,q->prenom);
q->code=q->suivant->code;
q->sal=q->suivant->sal;
strcpy(q->nom,q->suivant->nom);
strcpy(q->prenom,q->suivant->prenom);
q->suivant->code=E.code;
q->suivant->sal=E.sal;
strcpy(q->suivant->nom,E.nom);
strcpy(q->suivant->prenom,E.prenom);
ech=1;
}}}
while (ech==1);}
return l;
}
void menu(liste l)
{ int choix,co,k;
do{
printf(" .: M E N U :. \n");
printf("1. Creer une liste d'employes \n");
printf("2. Rechercher un employe selon son code \n");
printf("3. Supprimer un employe un employe selon son code \n");
printf("4. Afficher le nom des employés qui ont un salaire superieur à la moyenne\n");
printf("5. Verifier si la liste est triee \n");
printf("6. Trier la liste selon l'ordre croissant des salaires \n");
printf("7. Quitter \n");
printf("Donner votre choix : ");
scanf("%d",&choix);
switch(choix)
{
case 1:cree_liste(l);
break;
case 2:printf("code employe recherche :");
scanf("%d",&co);
if(rechercher(l,co)==1)
printf("employe est dans la liste \n");
else printf("employe absent \n");
break;
case 3:printf("code employe recherche :");
scanf("%d",&co);
l=supprimer(l,co);
break;
case 4:afficher(l);
break;
case 5: if(verifie(l)==1)
printf("la liste est triee\n");
else
printf("la liste n'est pas triee \n");
break;
case 6: l=tri_liste(l);break;
}}while (choix!=0);
}
main()
{
liste l=(liste)malloc(sizeof(empl));
l=liste_vide();
menu(l);
system("Pause");
return 0;
}
exercice supplimentaire liste d'entiers:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct cellule {
int val;
struct cellule *suivant;
struct cellule *precedant;
}Cellule ;
typedef struct cellule *liste2C;
liste2C liste_vide()
{
return NULL;
}
int longueur (liste2C l)
{int taille=0;
while (l!=NULL)
{
taille++;
l=l->suivant;
}
return taille ;
}
liste2C inserer(liste2C l,int i,int e)
{
if (i<0||i>longueur(l))
{
printf("Erreur :rang non valide !\n");
exit(-1) ;
}
liste2C pc=(liste2C)malloc(sizeof(Cellule));
pc->val=e;
pc->suivant=NULL;
pc->precedant=NULL;
if(i==0){pc->suivant=l;
l=pc;
pc->precedant=l;}
else {int j;
liste2C pt=(liste2C)malloc(sizeof(Cellule));
pt=l;
for(j=0;j<i-1;j++)
{pt=pt->suivant;
}
pt->suivant=pc;
pc->precedant=pt;
}
return l;
}
liste2C ajout_liste(liste2C l)
{
int ve;
int i=0;
do{
printf("donner la valeur à ajouter (0 pour terminer) ");
scanf("%d",&ve);
if(ve!=0)
{
l=inserer(l,i,ve);
i++ ;
}
}while(ve!=0);
return l;
}
liste2C vider(liste2C l)
{
while(l!=NULL)
{liste2C q;//=(liste2C)malloc(sizeof(Cellule));
q=l;
l=l->suivant;
free(q);
}
return l;
}
void affiche(liste2C l)
{
while(l!=NULL)
{printf("valeur=%d\n",l->val);
l=l->suivant;
}
}
void menu(liste2C l)
{ int choix,i,e;
do{
printf(" .: M E N U :. \n");
printf("1. creer une liste d'entier (terminer par 0) \n");
printf("2. Vider la liste \n");
printf("3. Afficher la liste \n");
printf("4. Quitter \n");
printf("Donner votre choix: ");
scanf("%d",&choix);
switch(choix)
{
case 1: l=liste_vide();
l=ajout_liste(l);
break;
case 2: l=vider(l);
break;
case 3:
affiche(l);
break;
}
}while (choix!=4);
}
int main(int argc, char *argv[])
{
liste2C l=(liste2C)malloc(sizeof(Cellule));
menu(l);
system("PAUSE");
return 0;
}
Commentaires
Enregistrer un commentaire