t_ptr_liste inversionListeADT(t_ptr_liste liste) { t_ptr_liste tmp = liste; t_ptr_liste buff = creer_vide(); t_ptr_liste prec = creer_vide(); while(!est_vide(tmp)) { prec = tmp; tmp = queue_liste(tmp); prec->next = buff; buff = prec; } return buff; }
/*@requires: p non NULL, p initalisée @assigns: rien @ensures: créée une copie de p*/ pile copier_pile(pile p) { pile r = creer_vide(); r.sommet = p.sommet; int i; for(i = 0; i <= r.sommet; i++) r.t[i] = p.t[i]; return r; }
t_ptr_liste copyListADT(t_ptr_liste liste) { t_ptr_liste tmp = liste; t_ptr_liste newList = creer_vide(); while(!est_vide(tmp)) { newList = ajout_liste(newList, tmp->value); tmp = queue_liste(tmp); } return newList; }
/*@requires: n >= 0 @assigns: rien @ensures: renvoie la factorielle de n*/ int factorielle(int n) { if(n <= 0) return 1; pile p = creer_vide(); empiler(&p, n); for(; n > 1; n--) empiler_moins_un(&p); return produit_pile(p); }
t_ptr_liste ajout_liste(t_ptr_liste liste, int val) { maillon* mail = (maillon*) malloc(sizeof(maillon)); mail->value = val; mail->next = creer_vide(); if(est_vide(liste)) return mail; mail->next = liste; return mail; }
/*@requires: n >= 0 @assigns: rien @ensures: renvoie la factorielle de n*/ int factorielle2(int n) { if(n <= 0) return 1; pile p = creer_vide(); empiler(&p, n); empiler(&p, n-1); for(n = n-1; n > 0; n--) empiler_produit_deuxpremierselements(&p); depiler(&p); return depiler(&p); }
t_ptr_liste creationListeADT() { int valToAdd = 0; t_ptr_liste liste = creer_vide(); while(valToAdd >= 0) { printf("Taper un nombre entier : "); scanf("%d", &valToAdd); if(valToAdd >= 0) liste = ajout_liste(liste, valToAdd); } return liste; }
int est_vide(t_ptr_liste ptr) { return ptr == creer_vide(); }