Vous êtes sur la page 1sur 8

SMI S4

FSAC
Langage C

Srie1 Les listes chanes


Dernire modification le : 5 avril 2012 11h22

Correction propose par www.SiTeduTout.com & www.SMIA.ma

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

Exo 1 : struct cellule { int val; struct cellule *suiv; }; typedef struct cellule* liste; int vide(liste l) if(l==NULL) return 1; else return 0; }

else return (1+longeur(l->suiv)); }

Exo 3 :
struct cellule { int val; struct cellule *suiv; }; typedef struct cellule* liste void en tete (liste*l,int x){

Exo 2: struct cellule { int val; struct cellule *suiv; };

liste q; q=malloc(sizeof(struct cellule)); q->val=x;

typedef struct cellule* liste;


q->suiv=*l;

int longeur(liste l)
*l=q ;

{int cpt=0; liste p=l; while(p!=NULL) {cpt++; p=p->suiv; } return cpt; } Exo 2 Version recursive: int longeur (liste l) { If (l==NULL) return 0;

Exo 4 :
struct cellule { int val; struct cellule *suiv; }; typedef struct cellule* liste void ajoute_au_milieu (liste l,int a, int x) { liste p=l, nouveau ;

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

while(p!=NULL && p->val!=a) {p=p->suiv;} if (P!=NULL) nouveau=malloc(sizeof(struct cellule)); nouveau->val=x; nouveau->suiv=p->suiv; p->suiv=nouveau; }

Exo 6 :
struct cellule { int val; struct cellule *suiv; }; typedef struct cellule* liste void supprime_milieu (liste l,int a) { liste q,p=l;

Exo 5 : struct cellule { int val; struct cellule *suiv;}; typedef struct cellule *liste void supprimer_en_tete (liste *l) { liste p; if(*l==NULL) printf("pas de suppression") ; else p= *l; l= *l->suiv; free(p); }

while(p!=NULL && p->val!=a) { p=p->suiv; } if (p!=NULL && p->suiv!=NULL) q=p->suiv; p->suiv=q->suiv; free(q); }

Exo 7 (1): liste position(liste l,int n) { liste p=l,q; int cpt=0; if (n==0) return NULL; else{ while (p!=NULL) && (cpt!=n)

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

{ q=p;

cpt++;

Exo 8: struct cellule { int val; struct cellule *suiv;};

p=p->suiv; if (cpt==n) return(q); } return NULL; } }

typedef struct cellule *liste liste concatener(liste La,liste Lb) liste p=La,q=Lb; if(La==NULL) return q; else while(p->suiv!=NULL) { p=p->suiv; }

Exo 7 (2): struct cellule { int val; struct cellule *suiv; }; void incrementer(liste l) {liste p=l,q; if(l!=NULL) while(p!=NULL && p->val==1) {q=p; p->val=0; p=p->suiv; } if(p==NULL) p=malloc(sizeof(struct cellule)): p->val=1; p->suiv=NULL;

p->suiv=q; return la; }

Exo 8 Version recursive: Liste concatene(liste La, liste Lb) { liste p=La; if (La==NULL) return Lb ; else{ p=malloc(sizeof(struct cellule)); p->val = La->val; p->suiv=concatene(La->suiv, Lb); return p ; } } Exo 9:
struct cellule { int val; struct cellule *suiv; }; liste(creer(T[],int n) { int i; liste l,p,q;

q->suiv=p;
l=malloc(sizeof(struct cellule);

else p->val=1; }

l->val=T[o]; l->occ=1;

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

l->suivant=NULL; i=1; while(p!=NULL && p->val!=T[i]) {p=p->suivant; } if(p==NULL) { p=malloc(sizeof(struct cellule)); p->occ=1; p->suiv=l; l=p; i++; }

printf(%f, &Treel[i]); for(i=0;i<10;i++) scanf(%f,&Timag[i]); }

b- struct cellule { float reel; float img; struct cellule *suiv; }; typedef struct cellule *liste

else p->occ++; i++; } return(l); }

Exo 10:
#include<stdio.h> a- void main() { struct complexe{ float R; float I; }; struct complexe Tab[10]; float Treel[10], Timag[10]; Int i, j=0,k=0; for(i=o;i<10;i++) Scanf(%d,&Tab[i]); for(i=0;i<10;i++) { if(Tab[i].I==0) Treel[j]=Tab[i].R; j++; elseif(Tab[i].R==0) Timag[k]=Tab[i].I; k++; } for(i=0;i<10;i++)

struct Rcellule { float Rval; struct cellule *suivant; }; typedef struct cellule *Rliste struct Icellule { float Ival; struct cellule *lien; }; typedef struct cellule *Iliste void main() { liste q=l; Rliste r,k=NULL; liste i,f=NULL; while(q!=NULL){ r=malloc(sizeof(struct Rcellule)); i=malloc(sizeof(struct Icellule)); r->suivant=k;

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

i->lien=f; k=r; f=i; q=q->suiv; } Exo 11 : a- struct cellule { int cne; int un; int deux; struct cellule *suiv;}; typedef struct cellule* liste; bint valide(liste l) { liste p=l; int cpt=0; while (p!=NUlL) { if(p->un=1 && p->deux=1) { cpt++; } p=p->suiv; } return cpt; } c- struct cellule { int cne; int un; int deux; struct cellule* suiv; }; typedef struct cellule* liste;

typedef struct cellule* pliste ; pliste valide(liste l){ liste q=l; pliste p=NULL, r ; while(q!=NULL){ if(q->un==0 && q->deux==1) r=malloc(sizeof(struct pcellule)); r->pcne=q->cne; r->pun=q->cne; r->pdeux=q->cne; r->lien=p p=r } q=q->suiv; } }

Exo 12 :
astruct celf { char prenom[10]; int age; struct cellule *lien;}; typedef struct celf * penfant;

struct celm { char nom[10]; int pere; int mere; penfant enfant;

struct pcellule { int pcne; int pun; int pdeux; struct cellule *lien; };

struct cellule *suiv; };

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

typedef struct celm* liste;

C Version Rcursive: Int nombre (liste L)

b- void naissance(liste l,char N,char pren) { liste p=l; penfant q,r;

{ if(L==NULL) return 0; else if (L->pere ==1 && L->mere==1) return (1+nombre(p->suiv)); else return (nombre(l->suiv)); }

while(p!=NULL && p->non!=N){ p=p->suiv; if(p!=NULL) q=p->enfant ; } if(q==NULL) { q=malloc(sizeof(struct celf)); q->prenom=pren; q->age=0; p->enfant=q ; q->lien=NULL ; } else{ while(q!=NULL) { r=q; q=q->lien; } q=malloc(sizeof(struct celf)); q->age=0; q->prenon=pren; q->lien=NULL; r->lien=q ; } }

Exo 13 : Int a ; do { printf(Entrer un entire); scanf(%d, &a); while(a==0) l=malloc(sizeof(struct cellule)); l->val=a; l->suiv= NULL; scanf(%d,&a); while (a!=0){ q=malloc(sizeof(struct cellule)); q->val=a; p=l; while (p!=NULL && a>=p->val) s=p; p=p->suiv; } if(p!=NULL) if(p==NULL){

c- int occ(list l) {
if(l==NULL) return 0; else{ if(p->pere==1 && p->mere==1) return(1+occ(l->suiv)); else return(occ(l->suiv)); } }

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

q->suiv=p; l=q; else { s->suiv=q; } elseif(p==NULL){ s->suiv=q; q->suiv=NULL; } scanf(%d, &a); } q->suiv=p;} Exo 15 : Void supprimer(liste *l, int x) { Liste p=*l,q ; While(p !=NULL && p->val==x) { q=p ; P=P->suiv ; If(p !=NULL) { p->preced=NULL; Free(q); Exo 14 : Typedef struct cellule{float val ; Struct cellule*suiv ; Strcut cellule*preced ;} *liste ; Void inserer(liste l, float x, float a) { liste l, nouveau ; while(p!=null && p->val !=a) p=p->suiv; if(p !=NULL) { nouveau=malloc(sizeof(strcut clllule)) ; nouveau->val=x; nouveau->suiv=p->suiv; nouveau->preced=p ; p->suiv=nouveau ; } if((nouveau->suiv)->preced=nouveau; } *l=p } } While(p!=NULL) If(p->val==x) {q=p; (p->preced)->suiv)=p->suiv; If(p->suiv!=NULL) ( p->suiv)->preced=p->preced; p=p->suiv; free(q); } else p=p->suiv; }

SMI S4 Les listes chanes www.SiTeduTout.com & www.SMIA.ma

Vous aimerez peut-être aussi