Académique Documents
Professionnel Documents
Culture Documents
2 Exercice 1
#include <stdio.h>
int t[100];
int taille;
}pile;
p->taille=0;
int est_vide(pile p)
if (p.taille==0)
return (1);
else
return (0);
}
void empiler (pile*p, int e)
if (p->taille==100)
else
p->t[p->taille]=e;
(p->taille)++;
if (p->taille==0)
else
(p->taille)--;
if (est_vide(p))
else
return p.t[(p.taille)-1];
while (!est_vide(p))
depiler (&p);
//pile p2;
while (!est_vide(*p))
if ((p->t[(p->taille)-1])%2==0)
empiler(p1,p->t[(p->taille)-1]);
depiler (p);
else
empiler(&p2,p->t[(p->taille)-1]);
depiler (p);
while (!est_vide(p2))
{
empiler(p1,p2.t[(p2.taille)-1]);
depiler (&p2);
int main()
pile p,p1,p2;
init (&p);
init(&p1);
init(&p2);
affiche (p);
pairs_impairs(&p,&p1,p2);
affiche (p1);
Exercice 2
Concernant la première question, on va empiler les caractères ‘(‘ dans la pile p et on va dépiler la
pile p, une fois, on a rencontré le caractère ‘)’. Si à la fin du traitement la pile p est non vide alors,
notre chaine n’est pas bien balancée. Sinon, concernant la deuxième question, on empiler la position
de la parenthèse ‘(‘ trouvée et on dépile la pile pos, une fois, on a trouvée une ‘)’. Si à la fin du
traitement la pile « pos » reste pleine alors la position de la parenthèse qui pose problème est celle
stockée au sommet de la pile « pos ».
Pile p, pos ;
For (int i=0 ; i<strlen(ch) ; i++)
Else
If (ch[i] == ’)’ )
if (!est_vide(p))
Else
If (!est_vide(p))
Else
3 Exercice 3
#include <stdio.h>
struct stfile
{
int t[Taille];
int tete;
int queue;
};
f->tete=0;
f->queue=0;
if(f.tete==f.queue)
return 1;
else
return 0;
{
printf ("la file est pleine");
else
f->t[f->queue]=e;
f->queue=(f->queue+1)%max;
if (vide(*f)==0)
f->tete=(f->tete +1)%max;
if (vide(f)==0)
}
void pairs_impairs(file * f1, file* f2)
file f3;
while (vide(*f1)==0)
if((f1->t[f1->tete])%2==0)
enfiler(f2, f1->t[f1->tete]);
defiler(f1);
else
enfiler(&f3, f1->t[f1->tete]);
defiler(f1);
/*affiche (*f1);
printf ("******\n");
affiche (*f2);
printf ("******\n");
affiche (f3);*/
while ((vide(f3)==0))
enfiler(f2, f3.t[f3.tete]);
defiler(&f3);
While (!vide(f1))
If (f1.t[tete]%2==0)
Defiler (f1) ;
N++ ;
While (n !=0)
Int i=n ;
While (i!=1)
Defiler (f3) ;
i-- ;
Defiler(f3) ;}
n-- ;
int main()
file ff;
init(&ff);
file ft;
init(&ft);
enfiler(&ff, 1);
enfiler(&ff, 3);
enfiler(&ff, 6);
enfiler(&ff, 9);
enfiler(&ff, 8);
affiche(ff);
//defiler (&ff);
//affiche(ff);
printf ("le resultat de la file apres execution est \n");
//pairs_impairs(&ff, &ft);
pairsInverse(ff,&ft);
affiche (ft);
return 0;
4 Exercice 4
Remarque: concernant cet exercice on va supposer que les listes ne contiennent pas des doublons
#include <stdio.h>
#include <stdlib.h>
struct noeud{
int val;
};
if (*l == NULL)
new->suivant=NULL;
*l=new;
else
new->suivant=*l;
*l=new;
return (*l);
void affiche(liste l)
liste q=l;
while (q!=NULL)
q=q->suivant;
//printf("\n");
}
if (!l1)
*la=NULL;
if(!l2)
*la=l1;
liste p=l1;
while (p!=NULL)
int existe=0;
liste pp=l2;
while(pp!=NULL)
if(pp->val==p->val)
existe=1;
pp=NULL;
}
else
pp=pp->suivant;
if(existe==0)
*la=ajouttete(la, p->val);
p=p->suivant;
return (*la);
Liste p=*lb=l1;
while (p->suivant)
p=p->suivant;
int main()
liste p=NULL;
liste res=NULL;
liste ad=NULL;
// liste v=NULL;
p=ajouttete(&p, 8);
p=ajouttete(&p, 2);
p=ajouttete(&p, 1);
affiche (p);
liste r=NULL;
r=ajouttete(&r, 3);
r=ajouttete(&r, 2);
r=ajouttete(&r, 9);
printf("********\n");
affiche(r);
res=soustraction(p, r,&res);
printf ("le resultat de la soustraction est\n");
affiche (res);
ad=addition(p, r, &ad);
affiche (ad);
return 0;
5 Exercice 5
En récursif :
liste C=NULL;
if ((!A)&&(!B))
return(C)
C=diffsym(A->suiv, B);
C=insere(A->val;C);
return(C);
{
C=diffsym(A, B->suiv);
C=insere(B->val;C);
return(C);
C=diffsym(A->suiv, B->suiv);
return(C);
En itératif :
while (A&&B)
if (A->val val)
if (fc)
fc->suiv=insere(A->val,NULL);
fc=fc->suiv;
else
fc=C=insere(A->val,NULL);
A=A->suiv;
if (fc) {
fc->suiv=insere(B->val,NULL);
fc=fc->suiv;}
else {
fc=C=insere(B->val,NULL);
B=B->suiv;}
if (!A)
for (;B;B=B->suiv){
Else { fc=C=insere(B->val,NULL);}
else fc=C=insere(A->val,NULL);
return(C);}
{p=(liste)malloc(sizeof(maillon)) ;
p->val=x ;
p->suiv=L ;
return(p) }